Combo-box loses selection after collection changes
基本上,我有一个绑定到ObservableCollection类的WPF组合框.如果我需要对其进行一些更改,例如清除并重新填充它以获取数据库的新快照,则此类具有延迟收集更改通知的额外功能.
我的组合框绑定同时设置了DisplayMemberPath和SelectedValuePath. SelectedValuePath解析为整数属性.
问题与引用的问题相同,当我刷新绑定集合中的值时,绑定的ComboBox会丢失其选择,并变为空白(SelectedIndex = -1).
我可以确认,在重新填充集合并将项目放回其中之前,CollectionChanged事件不会被触发.
更令人费解的是,如果我做以下事情:
using (_collection.DelayNotifications()) { var items = _collection.ToArray(); _collection.Clear(); _collection.AddRange(items); }
组合框不会失去其选定的值.
这表明如果集合中的项目被从数据库中检索的新项目替换它会中断 – 如果我没有使用SelectedValuePath绑定,我可以接受这个,但是因为我是,并且因为整数值是相同的,所以肯定我在做什么应该工作?
我正在使用.NET 3.5 SP1
有人有任何想法吗?
编辑
从下面的评论和Blam的回答.我确实接受这就是为什么这样做的原因.但它并没有真正帮助我.
我将ComboBox的SelectedValue属性绑定到我的视图模型上的Integer属性.如果我要绑定SelectedItem,我需要在我的视图模型上绑定到该对象类型的属性 – 但它是我实际上的整数属性.
目前我通过强制属性’SelectedValue’的属性更改事件来“修复”(读取轻微黑客)问题.这似乎使ComboBox重新检查其内部列表,找到与定义的SelectedValuePath匹配的项目.
WPF组合框必须“知道”它具有SelectedValuePath值设置,因此我认为它没有太大的飞跃,可以假设它会调整其项目匹配逻辑.但是,这超出了SO的范围.
我意识到我可能会接受这只是WPF的工作方式,但是在WinForms中使用数据绑定的组合框架打了几年之后,我有点希望我不必使用WPF