SelectedItem 的更新不更新显示值

时间:2021-01-14 14:06:45

标签: wpf combobox rename selecteditem

我以为网上有很多答案,但奇怪的是似乎没有一个适合我的问题。

很简单:我有一个带有组合框的 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 会立即更新它。

到目前为止我尝试过:

  • UpdateSourceTrigger = 我的 XAML 中的 PropertyChanged
  • 模式 = XAML 中的双向
  • 在我的 viewModel 的命令方法中使用 MyCollectionViewSource.View.Refresh()。

但到目前为止没有任何效果,我的解决方法更像是一个黑客。

我是否遗漏了一些明显的东西??

0 个答案:

没有答案
相关问题