2014-08-27 101 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"); 
} 
相關問題