通知属性更改事件,不带setter

本文关键字:不带 setter 事件 属性 通知 | 更新日期: 2023-09-27 18:12:16

我正在使用MVVM架构开发一个WPF应用程序,作为一个常见的场景,使用属性来通知更改,如

public List<EmployeeInfo> Employees
    {
            get
            {
                return _employees;
            }
            set
            {
                _employees = value;
                NotifyPropertyChanged(() => Employees);
            }
        }

我唯一的问题是,我正在使用属性setter通知应用程序对某些值所做的更改,根据FxCop这是一个坏的做法和'CollectionPropertiesShouldBeReadOnly'。我想在这上面改进一下,告诉我一些机制让我不用setter就能使用notifypropertychanged。

通知属性更改事件,不带setter

如果你的集合属性是只读的,你不需要通知任何东西,整个集合已经改变为一个不同的集合——相反,集合上的事件处理程序将被通知集合内的变化(增加项目等)。

如果你需要能够改变属性在视图模型中引用的集合,你总是可以使setter 私有,并保持现有的通知机制。

ObservableCollection本身通知发生的更改。所以你不需要引发PropertyChanged事件。如果您认为有必要更改集合,那么您可以删除和添加项。

使用setter意味着您正在尝试用新的对象实例替换集合的实例。如果您只是担心集合中项目的更改,那么这已经内置到observablecollection中。FxCop会报错setter不管你是否有notifypropertychanges调用