我在我的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,我可以在视图中看到它。
现在这里是我想要实现的。当我从视图中更改选定的项时,我需要进行检查,如果值为good/bad(或任何其他值),则设置选定的项,否则不要设置。所以我的视图模型更改如下。
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返回2nd和4th值的false),所有值都很好。我希望如果我选择第二个或第四个元素,则selectedItem不会更改。但我的代码没有正确地执行此操作。如果我选择第二个元素,则视图仍显示第二个元素为选定状态。我知道我的代码有问题,但是是什么呢?