2

안녕하세요, 저는이 작업을 수행하는 몇 가지 방법을 시도했지만 성공하지 못했거나 이상적이지 않았습니다. 간단히 컬렉션에있는 항목의 PropertyChanged 이벤트를 catch하고 싶습니다. 나는 순간 에서 수동으로 최대 유선하지만 더 우아한 해결책이 궁금 오전 :WPF 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

감사합니다. 좋은 전화 –

+0

@infensus 기꺼이 도와 드리겠습니다. –

관련 문제