2016-12-05 5 views
0

У меня есть список объектов дома. Эти наследуют ObservableCollections от лицПолучить холдинг ObservableCollection экземпляра NotifyCollectionChangedEventArgs или отправителя

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

В любом классе я добавил жителей хендлера

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

Handling:

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!

ответ

2

sender аргумент содержит экземпляр ObservableCollection:

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

    ... 
} 

Как примечание, вы должны объявить сбор как (только для чтения) собственности вместо поля, чтобы сделать его доступным для данных WPF привязки :

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

О, ты был прав! Извини, была моя ошибка. В моем случае я накладываю коллекцию на тип House, чтобы не набирать Person:/Спасибо за ваш ответ !! Не видел. Вопрос теперь кажется довольно тривиальным. –

 Смежные вопросы

  • Нет связанных вопросов^_^