如何在没有setter的情况下实现INotifyPropertyChanged

本文关键字:情况下 实现 INotifyPropertyChanged setter | 更新日期: 2023-09-27 18:19:30

我需要在类中实现INotifyPropertyChanged(我的目标是,每次删除"JobDataGroup.Items"中的Item时都更新ListView),但在每个教程中,都会从setter调用OnPropertyChanged。既然我没有二传手,我该怎么办?

我的班级:

public class JobDataGroup : repVReportsDataCommon, INotifyPropertyChanged
{
    public ObservableCollection<ServiceJobItem> Items
    {
        get { return new ObservableCollection<ServiceJobItem>(repVReportsDataSource.GetJobItems().Where(_predicate)); }
    }
    #region PropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string info)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if(handler != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
    #endregion
}

如何在没有setter的情况下实现INotifyPropertyChanged

从哪里调用OnPropertyChanged方法并不重要,只要在需要重新评估属性时调用即可。

由于每次访问getter时都要重新创建集合,因此使用ObservableCollection毫无意义。您还可以使用List,并手动引发OnPropertyChanged:

public List<ServiceJobItem> Items { get; private set; }
void UpdateItems() {
    Items = new List<ServiceJobItem>(repVReportsDataSource.GetJobItems().Where(_predicate));
    OnPropertyChanged("Items");
}