我开始了一个基于MVVM
方法的新项目。我将从一些web服务异步加载一些数据。我对在视图模型、模型或两者中在哪里实现这个INotifyPropertyChanged
接口感到困惑。此外,如果我在一个模型上实现INotifyPropertyChanged(让我们称之为ModelA)。然后我创建了一个ObservableCollection<ModelA>
,它会不会是多余的,因为ObservableCollection
本身会跟踪对列表所做的任何数据更改?
ObservableCollection
类仅在以下操作的情况下更新UI:
- 项已添加到集合中
- 项目已从集合中删除
- 集合清晰
但是,如果任何property changes in underlying item
,即您的案例中的ModelA
,则它是won't be reflected on UI
,除非您的Model类正在实现INotifyPropertyChanged
接口并在属性更改时引发PropertyChanged事件。
因此,作为经验法则,您应该在ViewModel
层和Model
层实现INPC
。
实际上,您需要将INotifyPropertyChanged实现为对象,该对象的属性将使用数据绑定显示在UI中。若您将UI直接绑定到模型的属性,那个么您也需要在模型中实现它。
ObservableCollection仅在添加对象或从集合中删除对象时通知UI。若要在该ObservableCollection中的一个或多个对象的属性发生更改时通知UI,您仍然需要在该对象类中实现INotifyPropertyChanged。
答案很简单。如果您需要您的模型来实现INotifyPropertyChanged,那么它应该实现。冗余与否如果你需要跟踪一个属性,你最好使用该事件,而不是ObservableCollection。