我正在使用MVVM架构师开发一个WPF应用程序,并且使用适当的方式来通知更改,如
public List<EmployeeInfo> Employees
{
get
{
return _employees;
}
set
{
_employees = value;
NotifyPropertyChanged(() => Employees);
}
}
我唯一的问题是我使用属性设置器来通知应用程序对某些值所做的更改,根据FxCop,这是一种不好的做法'CollectionPropertiesShouldBeReadOnly'
。所以我想改进一点,所以告诉我一些机制,我可以使用Notify属性更改而不使用setter。
答案 0 :(得分:3)
如果您的集合属性是只读的,则无需通知任何已将整个集合更改为其他集合的内容 - 而是将通知集合上的事件处理程序集合内的变化(项目的添加等)。
如果您需要能够更改属性在视图模型中引用的集合,则可以始终使setter private 并保留现有的通知机制。
答案 1 :(得分:0)
ObservableCollection本身会告知发生的变化。所以你不需要引发PropertyChanged事件。如果您认为有必要更改集合,则可以删除和添加项目。由于可观察的模式,更改将被撤销。
答案 2 :(得分:0)
您使用setter这一事实意味着您正在尝试使用新的对象实例替换集合的实例。如果您只是担心集合中项目的更改,那么它已经构建在observablecollection中。 FxCop会抱怨setter是否有notifypropertychanges调用。