2011-04-26 164 views
2

您好我正在嘗試一些方法來做到這一點,但要麼不成功,要麼不理想。我只想 捕獲集合中任何項目的PropertyChanged事件。我已經手動有線它的那一刻 ,但我不知道是否有一個更優雅的解決方案:WPF Catch ObservableCollection的項目屬性更改

public class Item : INotifyPropertyChanged 
{ 
    ... 
    public delegate void MyPropertyChangedHandler(object sender, PropertyChangedEventArgs e); 
    public event MyPropertyChangedHandler MyPropertyChanged; 

    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 
    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventArgs args = new PropertyChangedEventArgs(propertyName); 
     PropertyChanged(this, args); 
     if (MyPropertyChanged != null) MyPropertyChanged(this, args); 
    } 
    ... 
} 

public class ItemCollection : ObservableCollection<Item> 
{ 
    ... 
    public delegate void MyPropertyChangedHandler(object sender, PropertyChangedEventArgs e); 
    public event MyPropertyChangedHandler MyPropertyChanged; 

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
    { 
     if (e.Action == NotifyCollectionChangedAction.Add) 
     { 
      foreach (Item item in e.NewItems) 
      { 
       item.MyPropertyChanged += new Item.MyPropertyChangedHandler(item_MyPropertyChanged); 
      } 
     } 

     base.OnCollectionChanged(e); 
    } 

    void item_MyPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     MyPropertyChanged(sender, e); 
    } 
    ... 
} 

然後,我可以很容易地連接到集合的MyPropertyChanged事件和它的作品很好,但更優雅的人?你幾乎做

在此先感謝

回答

3

你需要做什麼,AFIK有沒有更好的方式來做到這一點。

有一件事,你可能想要添加代碼來刪除你的事件處理程序,當該項目從集合中刪除,成爲一個好公民,並避免內存泄漏。

+0

感謝和好的來電 – 2011-04-26 22:02:35

+0

@infensus樂於幫助 – 2011-04-26 22:08:49

相關問題