我有一个窗口与组合框。这个comboboxhas有5个ComboboxItems。修改SelectedItem不适用于MVVM
在这个例子中我想,这是无法选择的项目3,4和5
我已经试过两种不同的方式:MVVM方式和代码隐藏方式
MVVM方式:
XAML:
<ComboBox SelectedIndex="{Binding Path=SaveIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=SaveSelectedItemCheck}" Name="SaveCombobox">
视图模型:
public object SaveSelectedItemCheck
{
get { return _control.SaveCombobox.Items[CurrentSaveIndex]; }
set
{
if (value != _control.SaveCombobox.Items[0] && value != _control.SaveCombobox.Items[1])
{
OnPropertyChanged("SaveSelectedItemCheck");
}
}
}
代码隐藏方式:
XAML:
<ComboBox SelectedIndex="{Binding Path=SaveIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="Save_SelectionChanged">
代码隐藏:
private void Save_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox combobox = sender as ComboBox;
if(combobox == null)
{
return;
}
if (combobox.SelectedItem != combobox.Items[0] && combobox.SelectedItem != combobox.Items[1])
{
combobox.SelectedItem = combobox.Items[1];
e.Handled = true;
}
}
但它仅与代码隐藏的方式,这是肮脏的工作。
为什么无法使用MVVM方式?
为什么你绑定selectedindex和selecteditem。只需使用SelectedItem。另一种方法是将你的itemssource绑定到一个CollectionView。 collectionView将包含所选属性,因此您不必绑定到selecteditem – 2012-08-10 13:43:30