问题描述
我以为网上有很多答案,但奇怪的是似乎没有一个适合我的问题。
很简单:我有一个带有组合框的 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()。
我是否遗漏了一些明显的东西??
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)