【发布时间】:2011-02-13 15:11:13
【问题描述】:
很抱歉之前的冗长帖子。这是我的简明 (!) 描述。
我将集合视图作为 itemsSource 绑定到组合框,并将其 selectedvalue 与我的视图模型中的属性绑定。我必须保留 IsSynchronizedWithCurrentItem="False"。
我更改视图的源列表,然后刷新视图。更改(添加、删除、编辑)的项目正确显示在组合的项目列表中。但问题出在所选项目上。当我更改它的属性(也是组合的显示成员路径)时,更改的属性值不会反映在组合的选择框上。如果您打开组合下拉菜单,它会正确显示在项目列表中,但不会显示在选择框上。
现在,如果我在 XAML 中将组合框标记更改为 Listbox(保持所有属性不变),那么当所选项目的 displaymember 属性值更新时,更改会反映在列表框的所选项目上。
为什么会出现这个问题?
仅供参考:
我的视图模型具有属性 EmployeeCollectionView 和 SelectedEmployeeId,它们分别绑定为 ItemsSource 和 SelectedValue。此 VM 实现 INotifyPropertyChanged 接口。
我的核心员工类(其中的列表是 EmployeeCollectionView 的源)只是一个没有 INotifyPropertyChanged 的模型类。
DisplayMemberPath 是员工模型类的“名称”属性。我通过某种方式对此进行了更改,并希望组合选择框能够更新该值。
我尝试通过将 SelectedEmployeeId 设置为 0(它正确地从 itemsSource 中选择虚拟“-- 全选-”员工条目)来刷新 SelectedEmployeeId 并返回旧的选定值。但是没有用。旧值带我回到旧标签。物品集合有最新条目。
当我在视图刷新之前设置组合框的 IsEditable=True 并在刷新之后设置 IsEditable=False 时,一切正常!
但这是一个补丁,没有必要。
谢谢
维尼特·桑赫
【问题讨论】:
标签: mvvm combobox selectedvalue collectionview