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

本文关键字:隧道 事件 触发器 WPF MVVM 停止 | 更新日期: 2023-09-27 18:21:14

我想捕获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/>

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

如果您正在使用MVVM,为什么不使用SelectedItem Dependency属性并在ViewModel中绑定一个属性,例如:

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

通过在绑定到ICommand in my视图模型:TabItem上使用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>