【发布时间】:2012-12-31 03:58:26
【问题描述】:
我在 WPF/MVVM 项目中的 ComboBox 有问题。更改 ViewModel 后(我正确使用所有内容:INotifyPropertyChanged、ObservableCollection 等)ComboBox 并不总是更改其值。我已经对其进行了调试,来自 ViewModel 的 getter 返回了正确的值 (string.Empty),但 ComboBox 显示了列表中的一个值。下面是一段代码:
// It doesn't work.
<ComboBox ItemsSource="{Binding ItemsCollection}" SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
// It works.
<TextBlock Text="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
如果 SelectedItem 是 string.Empty 或 null,则 TextBlock 会正确更新,但如果 SelectedItem 是 string.Empty,则 ComboBox 不会正确更新(保留旧值)。仅当 SelectedItem 为 null 值时才会清除。
为什么会出现这种情况?
// 编辑:
也许我解释错了。我有两个网格:左边有文件树,右边有选定文件的属性。当我第一次选择没有设置属性的文件A 时,ComboBox 是空的。如果我选择设置了此属性的文件B,它将出现在组合框中。接下来,如果我选择具有空属性的文件 C,旧值将保留在 ComboBox 中(来自所选文件之前 - B)。如果来自C 的这个属性是null,而不是string.Empty,则清除ComboBox。
【问题讨论】:
-
我忘了补充一点,我更改了 ViewModel(实际上是针对文件),如果下一个文件 (ViewModel) 的 SelectedItem 为空,则组合框不会更改其值。
-
既然您正在处理字符串,您是否尝试过使用
SelectedValue而不是SelectedItem? -
是的,这是解决方案。但我不明白它为什么会起作用。
标签: c# wpf mvvm combobox inotifypropertychanged