你如何处理MVVM中的ComboBox SelectionChanged?

时间:2009-06-04 13:15:13

标签: wpf events mvvm attachedbehaviors

对于那些使用纯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>

3 个答案:

答案 0 :(得分:66)

这篇文章很老了,但是因为我遇到了同样的问题。这是我如何解决它(使用框架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>

然后你只需要在viewmodel中实现SelectionChangedCommand。

答案 1 :(得分:26)

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

答案 2 :(得分:3)

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

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