我有我的组合框在WPF/MVVM项目中的问题。更改ViewModel后(我正确使用所有内容:INotifyPropertyChanged
,ObservableCollection
等),ComboBox并不总是改变它的值。我已经对它进行了调试,并且来自ViewModel的getter返回了正确的值(string.Empty
),但ComboBox从列表中显示了一个值。下面的代码了一下:在WPF/MVVM与空和空字符串组合框
// 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}"/>
TextBlock的正确更新,如果是的SelectedItem或string.Empty
null
,但没有正确更新组合框(旧值保持),如果是的SelectedItem string.Empty
。只有在SelectedItem为null
的值时才会清除。
这是怎么发生的?
// 编辑:
也许我解释是错误的。我有两个网格:左边有树和文件,右边有选定文件的属性。当我第一次选择没有设置属性的文件A
时,组合框是空的。如果我选择文件B
,它具有此属性设置,它会出现在组合框中。接下来,如果我选择具有空属性的文件C
,则旧值将保留在ComboBox中(从选定文件之前 - B
)。如果C
的该属性为null
,而不是string.Empty
,则清除组合框。
我忘了添加,我更改ViewModel(对于文件actualy),如果下一个文件(ViewModel)具有空的SelectedItem,组合框不会更改其值。 –
既然你正在处理字符串,你有没有尝试过使用'SelectedValue'而不是'SelectedItem'? – ShadeOfGrey
是的,这是解决方案。但我不明白为什么它的工作。 –