【问题标题】:ComboBox in WPF/MVVM with null and empty stringWPF/MVVM 中的 ComboBox,带有 null 和空字符串
【发布时间】:2012-12-31 03:58:26
【问题描述】:

我在 WPF/MVVM 项目中的 ComboBox 有问题。更改 ViewModel 后(我正确使用所有内容:INotifyPropertyChangedObservableCollection 等)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.Emptynull,则 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


【解决方案1】:

对 ComboBox 使用 CollectionViewSource 而不是 ObservableCollection。

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 2012-06-19
    • 2017-02-20
    • 1970-01-01
    • 2011-11-25
    • 2016-08-09
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多