【发布时间】:2012-08-10 13:40:14
【问题描述】:
我有一个带有组合框的窗口。这个组合框有 5 个 ComboboxItems。
在示例中,我希望无法选择项目 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 将包含一个属性 Selected,因此您不必绑定到 selecteditem
标签: wpf mvvm selecteditem