c# – WPF:Combobox在绑定ItemSource集合更改后丢失所选索引

前端之家收集整理的这篇文章主要介绍了c# – WPF:Combobox在绑定ItemSource集合更改后丢失所选索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
搜索谷歌并在这里寻找答案,我的问题与下面的问题有些相关,但不同,足以保证一个新的问题.

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

猜你在找的C#相关文章