2014-08-27 49 views
1

我需要将INotifyPropertyChanged实现到我的类中(我的目标是,每次从'JobDataGroup.Items'中删除一个Item时更新一个ListView),但是在每个教程中,OnPropertyChanged都会从setter中调用。由于我没有二传手,我该如何处理?如何在没有setter的情况下实现INotifyPropertyChanged?

我的班级:

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 
} 
+0

你会开除它作为删除项目的部分代码。 – 2014-08-27 09:18:24

+0

当你的某个项目被删除时,你应该使'Items'集合保持最新,因为你使用的是一个'Observable'集合来侦听集合中的变化(例如删除或添加项目)。 – 2014-08-27 09:20:26

回答

1

它不会从那里你打电话给你OnPropertyChanged方法没关系,把它当属性需要重新评估。

由于每当访问getter时都重新创建集合,因此使用ObservableCollection没有意义。 你还不如只使用一个列表,而不是手动提高OnPropertyChanged:

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

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