如何使用ObservableCollection数据绑定?

时间:2014-07-27 23:29:32

标签: c#

大家好我不熟悉c#mvvm或数据绑定。我看到了一些使用的例子 ObservableCollection正如所解释的,An ObservableCollection是给定类型的对象的动态集合。可以使用自动动作通知添加,删除或更新对象。

我有以下代码:ObservableCollection<StudentViewModel>类型的属性,但它也实现了INotifyPropertyChanged接口。那么为什么需要在这里实现类型为INotifyPropertyChanged的{​​{1}}接口呢?为什么不只是自动通知?

ObservableCollection

更多背景:简单地说,当点击按钮时,以下函数public ObservableCollection<StudentViewModel> TheStudents { get { return _theStudents; } set { if (_theStudents == value) return; if (_theStudents != null) { foreach (var StudentViewModel in _theStudents) { DisconnectStudentViewModel(StudentViewModel); } } _theStudents = value; if (_theStudents != null) { foreach (var StudentViewModel in _theStudents) { ConnectStudentViewModel(StudentViewModel); } } OnPropertyChanged("TheStudents"); } } 将触发------&gt; GetStudentsAction()依次告诉 VIEW 财产已经改变。

TheStudents = sth

1 个答案:

答案 0 :(得分:1)

ObservableCollection类在集合的内容发生更改时发送通知,例如添加或删除项目。这些是WPF可以监听的特殊“此集合已更改”事件(如INotifyCollectionChanged中所定义)。

当您为集合的新实例换出集合本身时,它不会发送通知。这是将集合作为属性的对象的责任。这是您在视图模型上的任何属性发生更改时必须发送的相同事件(如INotifyPropertyChanged中所定义)。

根据经验,拥有可以在外部设置的集合属性(您使用它们的方式)并不是一个好主意。通常,您会将集合属性设置为私有setter,并且只允许外部类添加,删除和清除项目中的项目。如果您的集合发生更改,则无需通知:在构造函数中实例化一次,之后它永远不会更改。

(该建议可能适用于您的情况,也可能不适用,但通常当我看到带有公共设置器的集合类型时,它表明设计存在缺陷。)