WPF MVVM:当ComboBox SelectedItem不在ItemsSource绑定中不起作用时

时间:2018-07-25 12:21:54

标签: wpf mvvm combobox

我正在使用WPF开发应用程序,遵循使用MVVMLight的MVVM模式。我有一个ComboBox的问题,我不知道该如何解决。

ComboBox的

ItemsSource由应用程序中的服务提供。通过绑定到VM的属性来设置SelectedValue:

<ComboBox ItemsSource="{Binding AllValues}" SelectedValue="{Binding SelectedValue, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" DisplayMemberPath="Key" IsSynchronizedWithCurrentItem="True"/>

public ObservableCollection<ComboBoxValue> AllValues { get; set; } 
public ComboBoxValue SelectedValue { get; set; }`enter code here`

如果我将VM中的SelectedValue更新为AllValues中存在的某个值,则一切正常,ComboBox选择被更新,SelectionChanged事件被触发。但是,如果我将VM中的SelectedValue设置为AllValues中不存在的某个值,则ComboBox不会发生任何事情,不会触发任何事件,并且我找不到可以覆盖的方法来处理这种情况。最终结果是ComboBox仍显示旧值,与其绑定的属性值不同。

我想处理这个问题,并在发生这种情况时更改SelectedItem的值。在VM中可以轻松完成此操作,但这不是处理此问题的合适位置。

1 个答案:

答案 0 :(得分:0)

这就是ComboBox的工作方式。 SelectedValue(和SelectedItem)将包含项目列表中的值或null。

通过使ComboBox可编辑(IsEditable="True"),然后将其Text属性设置为所需的任何内容,就可以实现所需的目的。

如果列表中有Text,则将选择该项目(因此将设置SelectedValue)。您可以订阅TextInput事件,以在Text被修改时得到通知,然后检查它是否在列表中,并执行适当的操作。