很抱歉,较早的冗长帖子。这里是我简洁的(!)描述。组合框与集合视图itemssource不更新对模型的更改的选择框项目
我将集合视图绑定为组合框作为itemsSource,并将其selectedvalue与我的视图模型中的属性绑定。我必须保持IsSynchronizedWithCurrentItem =“False”。
我更改视图的源列表,然后刷新视图。已更改(添加,删除,已编辑)的项目正确显示在组合的项目列表中。但问题在于选定的项目。当我改变其属性也是组合的显示成员路径时,改变的属性值不会反射回组合的选择框。如果您打开组合下拉列表,它将正确显示在项目列表中,但不会显示在选择框中。
现在,如果我将我的XAML中的组合框标签更改为Listbox(保留所有属性),那么当所选项目的displaymember属性值更新时,这些更改会反射回列表框的选定项目。
为什么会出现这个问题?
仅供参考:
我的视图模型具有性能EmployeeCollectionView和SelectedEmployeeId这必将为组合的的ItemsSource和的SelectedValue RESP。该VM实现INotifyPropertyChanged接口。
我的核心员工类(EmployeeCollectionView的源代码清单)只是一个没有INotifyPropertyChanged的Model类。
DisplayMemberPath是员工Model类的“Name”属性。我通过某种方式改变了这一点,并期望组合选择框更新值。
我尝试通过将SelectedEmployeeId设置为0(其中它正确地从itemsSource中选择虚拟“ - 全选 - ”员工条目)和旧选定值后刷新其SelectedEmployeeId。但没用。旧的价值将我带回旧的标签。项目集合虽然有最新的条目。
当我在视图的刷新和刷新之前使组合框的IsEditable = True时,我使IsEditable = False,然后事情正常工作!
但是这是一个补丁,是不必要的。
THX
摄影指导Vinit Sankhe
乔希嗨, THX对疗法的答案,但那么为什么这项工作的列表框。列表框的选定项目正确显示更新的名称(不带INotify接口)。 据我所知,在MVVM中,核心模型类(我的例子中的员工类)不建议有INotifyPropertyChanged。只有ViewModel实现这个接口。 – 2010-04-30 10:44:35
没有看到代码,我很难分辨ListBox的工作原理。但是你对MVVM的理解并不一定是错误的,但是MVVM还是比较新的,并没有真正的硬性规定。事实是,在MVVM中,您不应该直接在用户界面中公开“模型”类,但每个人都会不时地违反该规则。但是,如果您想要更改绑定成员以反映在用户界面中,则必须*实施INotifyPropertyChanged。 – Josh 2010-04-30 13:10:10