2016-12-05 1 views
0

집 개체 목록이 있습니다. 모든 클래스에서 사람NotifyCollectionChangedEventArgs 또는 보낸 사람에 의한 인스턴스의 ObservableCollection 보유

public class House{ 
    public ObservableCollection<Person> Residents = new ObservableCollection<Person>(); 
    ... 
} 

이러한 상속 ObservableCollections 내가는 거주자-처리기를 추가

List<House> Village = new List<House>(); 
foreach (House h in Village) { 
    h.Residents.CollectionChanged += OnResidents_Changed; 
} 

처리 :

private void OnResidents_Changed(object sender, NotifyCollectionChangedEventArgs e) { 
    if (e.NewItems!= null) { 
     foreach(Person p in e.NewItems){ 
      //In which house did he go? 
      e.GetSourceCollection() //<- how to solve 
     } 
    } 
} 

이 사람은 또한 두 개 이상의 집에있을 수 있습니다한다 같은 시간. 나는 사람의 속성을 변경할 가능성이 없다.

Thx!

private void OnResidents_Changed(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    var collection = (ObservableCollection<Person>)sender; 

    ... 
} 
참고로

, 당신은 대신 필드의 (읽기 전용) 속성으로 컬렉션을 선언해야 바인딩은 접근 WPF 데이터에 만들 :

답변

2

sender 인수는 ObservableCollection에 인스턴스를 보유하고 :

public class House 
{ 
    public ObservableCollection<Person> Residents { get; } 
     = new ObservableCollection<Person>(); 

    ... 
} 
+0

나는이 역시 생각했지만 발신자는 'Person' 유형입니다. 'ObservableCollection '유형이 아닌 이유를 모르십니까? 그러나 모든 ObservableCollection에서 동일한 동작입니다. [Microsoft API 참조] (https://msdn.microsoft.com/en-us/library/system.collections.specialized.notifycollectionchangedeventhandler (v = vs.110) .aspx) 그러나 이것은 정확하지 않습니다./ –

+0

아니요, 보낸 사람은 ObservableCollection입니다. 그렇지 않다면, 우리는 당신의 질문에있는 코드에 대해 말하는 것이 아닙니다. – Clemens

+0

오우 네가 옳았 어! 미안, 내 잘못이야. 필자의 경우, 집에 집을 짓지 않고 집을 짓는다. Person :/답장을 보내 주셔서 감사합니다 !! 그것을 보지 못했습니다. 질문은 이제 아주 사소하게 나타납니다. –

관련 문제