我以为网上有很多答案,但奇怪的是似乎没有一个适合我的问题。
很简单:我有一个带有组合框的 wpf 项目,其 SelectedItem 绑定到我的 ViewModel(实现 INotifyPropertyChanged)。我的 ComboBox 的 ItemsSource 绑定到 CollectionViewSource 的视图。
[这个例子中的所有属性名称都是虚构的,它们只是为了说明事情,所以你会明白]
<ComboBox ItemsSource = "{Binding MyCollectionViewSource.View}"
SelectedItem = "{Binding MyItem, Mode = TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedIndex = "{Binding MyIndex}"
</ComboBox>
CollectionViewSource 的来源是一个 ObservableCollection。
MyCollectionViewSource.Source = MyObservableCollection;
现在,我有一个文本框。组合框显示字符串。 SelectedItem 显示在 TextBox 中 - 因此用户可以更改该字符串(重命名 ComboBox 的 SelectedItem)并单击包含 UpdateContentCommand 的按钮。
<TextBox Text="{Binding MyText}"/>
现在,它做了它应该做的 - 但不是很详细。
显示在 ComboBox 中的 SelectedItem(更准确地说:它的显示,当下拉列表关闭时)有一个值 'dog'。如果我在 TextBox 中将它重命名为“cat”,它仍然显示“dog”。如果我点击 ComboBox 并出现下拉菜单,我可以看到没有更多名为“dog”的项目,而是一个名为“cat”的项目。
所以,我找到的解决方法如下:
在我的命令方法中,我将 SelectedIndex 设置为 -1,然后直接设置 SelectedIndex = 0(或我的 SelectedItem 具有的任何索引)。这样看起来就好像重命名 SelectedItem 会立即更新它。
到目前为止我尝试过:
但到目前为止没有任何效果,我的解决方法更像是一个黑客。
我是否遗漏了一些明显的东西??