大家好我不熟悉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
答案 0 :(得分:1)
ObservableCollection
类在集合的内容发生更改时发送通知,例如添加或删除项目。这些是WPF可以监听的特殊“此集合已更改”事件(如INotifyCollectionChanged
中所定义)。
当您为集合的新实例换出集合本身时,它不会发送通知。这是将集合作为属性的对象的责任。这是您在视图模型上的任何属性发生更改时必须发送的相同事件(如INotifyPropertyChanged
中所定义)。
根据经验,拥有可以在外部设置的集合属性(您使用它们的方式)并不是一个好主意。通常,您会将集合属性设置为私有setter,并且只允许外部类添加,删除和清除项目中的项目。如果您的集合发生更改,则无需通知:在构造函数中实例化一次,之后它永远不会更改。
(该建议可能适用于您的情况,也可能不适用,但通常当我看到带有公共设置器的集合类型时,它表明设计存在缺陷。)