นี่เป็นยอดนิยมใน Google ดังนั้นฉันจึงคิดว่าฉันจะเพิ่มโซลูชันของฉันในกรณีที่คนอื่นค้นหาสิ่งนี้
จากข้อมูลด้านบน (เกี่ยวกับความจำเป็นในการส่งไปยังINotifyCollectionChanged ) ฉันได้สร้างสองวิธีการขยายเพื่อลงทะเบียนและยกเลิกการลงทะเบียน
โซลูชันของฉัน - วิธีการขยาย
public static void RegisterCollectionChanged(this INotifyCollectionChanged collection, NotifyCollectionChangedEventHandler handler)
{
collection.CollectionChanged += handler;
}
public static void UnregisterCollectionChanged(this INotifyCollectionChanged collection, NotifyCollectionChangedEventHandler handler)
{
collection.CollectionChanged -= handler;
}
ตัวอย่าง
IThing.cs
public interface IThing
{
string Name { get; }
ReadOnlyObservableCollection<int> Values { get; }
}
การใช้วิธีการขยาย
public void AddThing(IThing thing)
{
thing.Values.RegisterCollectionChanged(this.HandleThingCollectionChanged);
}
public void RemoveThing(IThing thing)
{
thing.Values.UnregisterCollectionChanged(this.HandleThingCollectionChanged);
}
โซลูชันของ OP
public void AddThing(IThing thing)
{
INotifyCollectionChanged thingCollection = thing.Values;
thingCollection.CollectionChanged += this.HandleThingCollectionChanged;
}
public void RemoveThing(IThing thing)
{
INotifyCollectionChanged thingCollection = thing.Values;
thingCollection.CollectionChanged -= this.HandleThingCollectionChanged;
}
ทางเลือกที่ 2
public void AddThing(IThing thing)
{
(thing.Values as INotifyCollectionChanged).CollectionChanged += this.HandleThingCollectionChanged;
}
public void RemoveThing(IThing thing)
{
(thing.Values as INotifyCollectionChanged).CollectionChanged -= this.HandleThingCollectionChanged;
}