我的ComboBox
看起来像这样:
<ComboBox SelectedValue="{Binding Mode}" SelectedValuePath="Key" ItemsSource="{Binding MyModes}" DisplayMemberPath="Value" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding DataContext.SetModeCommand,RelativeSource={RelativeSource AncestorType=UserControl,Mode=FindAncestor}}" IsEnabled="{Binding IsForSet}" CommandParameter="{Binding}" ></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
SelectedValue和ItemsSource绑定到模型中的变量。
命令:SetModeCommand
位于ViewModel。
我希望在更改模型中的变量时该命令不起作用,但只有在通过UI更改它时才会起作用。
所以我创建了一个名为IsForSet
(bool)的变量,当我通过模型更改变量Mode
时,我将其设为false:
IsForSetUM = false;
Mode = 202;
IsForSetUM = true;
我的问题是,一旦我更改Mode
,就不会调用该命令。但只有在我将IsForSetUM
更改为true后才会生效。
我有解决方案!!
我的问题是我更改Mode
时没有立即调用该命令的原因?
答案 0 :(得分:1)
解决方法是将Binding上的NotifyOnSourceUpdated设置为true,并在EventTrigger中使用SourceUpdated事件,如下所示:
<ComboBox SelectedValue="{Binding Mode, NotifyOnSourceUpdated=True}" SelectedValuePath="Key" ItemsSource="{Binding MyModes}" DisplayMemberPath="Value" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SourceUpdated">
<i:InvokeCommandAction Command="{Binding DataContext.SetModeCommand,RelativeSource={RelativeSource AncestorType=UserControl,Mode=FindAncestor}}" CommandParameter="{Binding}" ></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>