命令太迟了

时间:2013-06-12 07:44:26

标签: wpf mvvm binding command eventtrigger

我的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时没有立即调用该命令的原因?

1 个答案:

答案 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>