35

对于那些做纯 MVVM 的人,你如何处理 ComboBox SelectionChanged 事件而不恢复到后面的代码?

我尝试了例如AttachedBehaviors但不支持 Event="SelectedChanged":

<ComboBox>
    <ComboBoxItem Content="Test1">
        <c:CommandBehaviorCollection.Behaviors>
            <c:BehaviorBinding Event="SelectionChanged" 
                               Command="{Binding SelectedChanged}"
                               CommandParameter="MainBorder123"/>
        </c:CommandBehaviorCollection.Behaviors>
    </ComboBoxItem>
    <ComboBoxItem Content="Test2"/>
    <ComboBoxItem Content="Test3"/>
</ComboBox>
4

3 回答 3

80

这篇文章很老了,但是因为我遇到了同样的问题。这是我解决它的方法(使用框架 4.0):想法是使用 System.Windows.Interactivity。

在 XAML 中:

<ComboBox ItemsSource="{Binding Items}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

然后你只需要在你的视图模型中实现 SelectionChangedCommand。

于 2011-04-28T21:20:09.783 回答
26

我不确定您所追求的是否可能,但我这样做的方式是将 SelectedItem 简单地绑定到视图模型上的属性。然后在属性设置器中,我调用任何我想要发生的自定义代码,即根据规则设置其他属性。如果我还需要将所选项目绑定到对象(以便更新其他绑定控件),我也会在 setter 中设置它并发送通知。

于 2009-09-09T15:42:25.397 回答
3

您将使用数据触发器来触发不同 UI 元素上的事件,例如“启用/禁用或可见/不可见”

如果您希望所选元素在其他 UI 元素中显示对象数据,那么您将使用数据绑定并将 UI 数据显示元素的 datacontext 设置为绑定到组合框中的当前选定项。

于 2009-06-04T13:40:00.083 回答