我在我的 WPF 应用程序中使用 ComboBox 并遵循 MVVM。我想在我的 ComboBox 中显示一个字符串列表。
XAML:
<ComboBox ItemsSource="{Binding ItemsCollection}" SelectedItem="{Binding SelectedItem}" />
查看型号:
public Collection<string> ItemsCollection; // Suppose this has 10 values.
private string _selectedItem;
public string SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
Trigger Notify of property changed.
}
}
现在这段代码工作得很好。我可以从视图中进行选择,并且可以在 ViewModel 中进行更改,如果我从 ViewModel 更改 SelectedItem,我可以在视图中看到它。
现在这就是我想要实现的目标。当我从视图中更改选定项目时,我需要检查值是好/坏(或任何东西)设置选定项目,否则不要设置它。所以我的视图模型变成了这样。
public string SelectedItem
{
get { return _selectedItem; }
set
{
if (SomeCondition(value))
_selectedItem = value; // Update selected item.
else
_selectedItem = _selectedItem; // Do not update selected item.
Trigger Notify of property changed.
}
}
现在,当我执行此代码并且 SomeCondition(value) 返回 false 时,SelectedItem 返回旧字符串值,但在我看来,ComboBox 中的选定项是我选择的值。因此,假设我的 ComboBox 中显示了 10 个字符串的集合。除第二个和第四个元素外,所有值都很好(SomeCondition 对第二个和第四个值返回 false)。如果我选择第二个或第四个元素 selectedItem ,我想要什么不要改变。但是我的代码没有正确执行此操作。如果我选择第二个元素,则视图仍将第二个元素显示为选中状态。我知道我的代码有问题。但它是什么?