基本上,我有一个绑定到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属性绑定到我的视图模型上的一个整数属性。如果我要绑定SelectedItem,我需要绑定到我的视图模型上的那个对象类型的属性,但实际上我想要的是整数属性。
目前,我通过强制触发与'SelectedValue'绑定的属性更改事件来“修复”(读取较小的黑客)此问题。这似乎使下拉框重新检查其内部列表,以查找与定义的SelectedValuePath匹配的项。
WPF Combobox必须“知道”它已设置SelectedValuePath值,因此我认为它会调整其项目匹配逻辑。但是这超出了SO的范围。我意识到我可能只能接受这就是WPF的工作方式,但在WinForms中与数据绑定的comboboxes斗争了几年后,我有点希望不必在WPF中这样做:尽管如此,WPF Combobox比WinForm Combobox更好。