Создайте класс, который реализует интерфейсы IDictionary, INotifyCollectionChanged и INotifyPropertyChanged. У класса будет экземпляр Dictionary, который он будет использовать для реализации IDictionary (один из методов Add кодируется ниже в качестве примера). И INotifyCollectionChanged, и INotifyProperyChanged требуют наличия событий, эти события должны запускаться в соответствующих точках в функциях-оболочках (опять же, обратитесь к методу Add ниже для примера)
class ObservableDictionary<TKey, TValue> : IDictionary, INotifyCollectionChanged, INotifyPropertyChanged
{
private Dictionary<TKey, TValue> mDictionary;
// Methods & Properties for IDictionary implementation would defer to mDictionary:
public void Add(TKey key, TValue value){
mDictionary.Add(key, value);
OnCollectionChanged(NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, value)
return;
}
// Implementation of INotifyCollectionChanged:
public event NotifyCollectionChangedEventHandler CollectionChanged;
protected void OnCollectionChanged(NotifyCollectionChangedEventArgs args){
// event fire implementation
}
// Implementation of INotifyProperyChanged:
public event ProperyChangedEventHandler ProperyChanged;
protected void OnPropertyChanged(PropertyChangedEventArgs args){
// event fire implementation
}
}
Edit:
Обратите внимание, что реализация интерфейса IDictionary прямо или косвенно потребует реализации трех дополнительных интерфейсов:
ICollection<KeyValuePair<TKey,TValue>>
IEnumerable<KeyValuePair<TKey,TValue>>
IEnumerable.
В зависимости от ваших потребностей, вам может не понадобиться реализовывать весь интерфейс IDictionary, если вы собираетесь вызывать только пару методов, а затем просто реализовать эти методы, и интерфейс IDictionary станет роскошью. Однако для привязки к работе необходимо реализовать интерфейсы INotifyCollectionChanged и INotifyPropertyChanged. Цитата