0

我有一个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?

4

1 回答 1

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>
于 2013-06-12T10:44:23.200 回答