如何更新ObservableCollection中已存在的元素?

5

我有一个ObservableCollection实例,绑定到一个WPF列表框上,其中包含两个不同的数据模板(一个用于显示,一个用于编辑)。编辑数据模板中的文本框具有单向绑定,并带有保存按钮。

当我按下保存按钮(在将列表项设置为编辑模式后),我需要进行哪些更改,以便我所更改的文本框值替换ObservableCollection中的值(并更新显示)?

3个回答

9

您收藏的项目应该是实现了INotifyPropertyChanged接口的类型。这样,当您单个项目对象中的属性值发生更改时,您的列表框将会收到通知。ObservableCollection仅在集合更改(添加、删除等)时引发CollectionChanged事件。

摘自MSDN库文章关于ObservableCollection的引用:

为了完全支持从绑定源对象向绑定目标传输数据值,您集合中支持可绑定属性的每个对象都必须实现适当的属性更改通知机制,例如INotifyPropertyChanged接口。


谢谢回答。我会尝试一下,看看会发生什么。 - Scott Lawrence
1
我按照你的建议在我的集合项上实现了INotifyPropertyChanged接口。这样做并将绑定从OneWay更改为TwoWay似乎解决了我的问题。 - Scott Lawrence

1

为了在绑定的客户端和数据源之间发生更改通知,您的绑定类型应该实现以下之一:

  • 实现INotifyPropertyChanged接口(首选)。
  • 为绑定类型的每个属性提供更改事件。

不要同时做两者。

来源:MSDN: INotifyPropertyChanged Interface


1

我曾经使用过 BindingList<T> 类解决类似的问题。

它可以在集合和单个项目更改时触发 ListChanged 事件。

自 .Net 3.5 引入


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接