通过 NotifyCollectionChangedEventArgs 或发送者获取实例的 ObservableCollection

Get holding ObservableCollection of Instance by NotifyCollectionChangedEventArgs or sender

我有一份房屋物品清单。这些继承了 ObservableCollections of Persons

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

在任何 class 我添加了 Residents-Handler

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
        }
    }
}

一个人应该也可以同时在一个以上的房子里。我无法更改人员属性。

谢谢!

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>();

    ...
}