停止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/>
如果您正在使用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>