2013-01-16 34 views
-1

我有我的组合框在WPF/MVVM项目中的问题。更改ViewModel后(我正确使用所有内容:INotifyPropertyChangedObservableCollection等),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.Emptynull,但没有正确更新组合框(旧值保持),如果是的SelectedItem string.Empty。只有在SelectedItem为null的值时才会清除。
这是怎么发生的?

// 编辑

也许我解释是错误的。我有两个网格:左边有树和文件,右边有选定文件的属性。当我第一次选择没有设置属性的文件A时,组合框是空的。如果我选择文件B,它具有此属性设置,它会出现在组合框中。接下来,如果我选择具有空属性的文件C,则旧值将保留在ComboBox中(从选定文件之前 - B)。如果C的该属性为null,而不是string.Empty,则清除组合框。

+0

我忘了添加,我更改ViewModel(对于文件actualy),如果下一个文件(ViewModel)具有空的SelectedItem,组合框不会更改其值。 –

+1

既然你正在处理字符串,你有没有尝试过使用'SelectedValue'而不是'SelectedItem'? – ShadeOfGrey

+0

是的,这是解决方案。但我不明白为什么它的工作。 –

回答

0

使用CollectionViewSource代替ObservableCollection for ComboBox。

+2

它没有帮助。 –