繁体   English   中英

在WPF MVVM中停止隧道事件触发器?

[英]Stop Tunneling Event Trigger in WPF MVVM?

我想捕获一个TabItem选择更改事件,即仅当用户更改选项卡时才调用ViewModel命令。 目前,我已成功执行此命令,但是更改的选择正在沿可视化树向下挖掘,因此,更改的选择会捕获到整个选项卡项目中,而不仅仅是在用户更改选项卡时。 有什么方法可以将触发器限制为仅选项卡更改吗?:

<TabControl Margin="10">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding CollapsedExpanderCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <TabItem Header="Account" >          
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>

如果您使用的是MVVM,为什么不使用SelectedItem依赖属性并在ViewModel中绑定属性,例如:

<TabControl ItemsSource="{Binding Path=Items, Mode=OneWay}"
            SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}">
</TabControl>

通过ICommand in my viewModel上绑定到ICommand in myTabItem上使用PreviewMouseLeftButtonDown事件触发器来解决此问题:

<TabItem Header="Memberships" Margin="0,0,-5,-3" HorizontalAlignment="Right" >
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
                            <i:InvokeCommandAction Command="{Binding MembershipTabSelectedCommand}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM