我是wpf和MVVM的新手,我花了一整天时间尝试将一个ComboBox的值传递给SelectionChanged上的ViewModel。我想在选择更改过程中调用一个函数。在mvvm中,它的解决方案是什么?
答案 0 :(得分:8)
在MVVM中,我们通常不处理事件,因为在视图模型中使用UI代码并不是很好。我们经常使用属性绑定到SelectionChanged
来代替使用ComboBox.SelectedItem
之类的事件:
查看型号:
public ObservableCollection<SomeType> Items { get; set; } // Implement
public SomeType Item { get; set; } // INotifyPropertyChanged here
查看:
<ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding Item}" />
现在,只要ComboBox
中的所选项目发生变化,Item
属性也会发生变化。当然,您必须确保已将视图的DataContext
设置为视图模型的实例以使其工作。如果要在更改所选项目时执行某些操作,可以在属性设置器中执行此操作:
public SomeType Item
{
get { return item; }
set
{
if (item != value)
{
item = value;
NotifyPropertyChanged("Item");
// New item has been selected. Do something here
}
}
}