C# 不使用setter通知属性更改事件

C# 不使用setter通知属性更改事件,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在使用MVVMArchitect开发一个WPF应用程序,并且作为一个常见的场景,使用properites来通知更改,如 public List<EmployeeInfo> Employees { get { return _employees; } set { _employees = va

我正在使用MVVMArchitect开发一个WPF应用程序,并且作为一个常见的场景,使用properites来通知更改,如

public List<EmployeeInfo> Employees
    {
            get
            {
                return _employees;
            }
            set
            {
                _employees = value;
                NotifyPropertyChanged(() => Employees);
            }
        }
公开员工名单
{
得到
{
返回(u)员工;;
}
设置
{
_员工=价值;
通知财产变更(()=>员工);
}
}

我唯一的问题是,我正在使用属性setter通知应用程序对某些值所做的更改,而根据FxCop,这是一种不好的做法,
“CollectionPropertiesShouldBreadoly”
。所以我想在这方面做一些改进,告诉我一些机制,我可以使用Notify属性changed而不使用setter

如果集合属性是只读的,则无需通知任何内容整个集合已更改为其他集合-相反,集合中的事件处理程序将收到集合内更改(添加项等)的通知


如果您需要能够更改属性在视图模型中引用的集合,则始终可以将setter设置为私有,并保留现有的通知机制。

ObservableCollection本身会通知所发生的更改。因此,您不需要引发PropertyChanged事件。如果您认为有必要更改集合,则可以删除和添加项目。由于可观察的模式,更改将被宣布。

您正在使用setter这一事实意味着您正在尝试用新的对象实例替换集合的实例。如果您只是担心集合中项目的更改,那么这已经内置到observablecollection中。FxCop将投诉设置程序,无论您是否有notifypropertychanges调用。

ObservableCollection本身支持通知更改,为什么您需要在此处添加自己的更改?我的集合属性不是只读的,但我不想为其编写设置程序,用户可以直接从中添加或删除任何内容,我只是希望它会通知我,无论何时发生,请不要期望它总是可观察的集合,它可以是任何列表、IEnumerable、字典等。Thanks@MSingh:这会产生巨大的差异-如果它是一个
列表
,那么就没有通知机制。这就是
可观察收集的全部要点。听起来您还不清楚只读属性(没有setter的属性)和不可变集合(其内容无法更改的属性)之间的区别。听起来您只需要一个只读属性,但返回一个可变(可更改)集合。如果您希望该集合通知侦听器,则必须使用
ObservableCollection
或类似的工具。是的,我对这些场景有点困惑,但感谢您的帮助。谢谢