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

时间:2014-08-27 09:09:00

标签: c# listview inotifypropertychanged

我需要在我的类中实现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
}

1 个答案:

答案 0 :(得分:1)

从您调用OnPropertyChanged方法的位置开始,在需要重新评估属性时调用它并不重要。

由于每次访问getter时都要重新创建集合,因此使用ObservableCollection是没有意义的。 您也可以只使用List而手动提升OnPropertyChanged:

public List<ServiceJobItem> Items { get; private set; }

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