【问题标题】:Calling property changed on a bound element在绑定元素上调用属性更改
【发布时间】:2011-09-28 11:22:06
【问题描述】:
我的视图模型为我的视图可用的属性实现了 INotifyPropertyChanged。它使未实现 INotifyPropertyChanged 的对象集合可用。
在我的视图中,我的集合绑定到一个 ItemControl,其中一个 ItemTemplate 用于单独显示每个项目。项目模板绑定到我的集合成员的名称属性。
当我的集合成员的属性发生变化时,我如何告诉我的视图更新?
【问题讨论】:
标签:
wpf
mvvm
inotifypropertychanged
【解决方案1】:
您需要为集合中的对象实现INotifyPropertyChanged(推荐方法),或者您可以通过类似的方式手动刷新绑定
myItemsControl.GetBindingExpression(
ItemsControl.ItemsSourceProperty).UpdateTarget();
如果您在 ViewModel 中,您可能可以在 Collection 类上引发 PropertyChanged 事件,如下所示,尽管我不确定这是否会更新各个项目
// My PropertyChanged method is usually called RaisePropertyChanged
RaisePropertyChanged("MyCollection");
您也可以按照 Mirimon 的建议进行操作,然后将值设置为 null,然后再返回,尽管我个人建议尽可能采用不同的方法。
【解决方案2】:
您必须为集合成员实现 INotifyPropertyChanged。或者您可以在 ViewModel 中重置您的集合:
public void Reset() {
List<TestData> temp = YourCollection;
YourCollection = null;
YourCollection = temp;
}