Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

General Observable Dictionary Class for DataBinding/WPF C#

I'm trying to create a Observable Dictionary Class for WPF DataBinding in C#. I found a nice example from Andy here: Two Way Data Binding With a Dictionary in WPF

According to that, I tried to change the code to following:

class ObservableDictionary : ViewModelBase {     public ObservableDictionary(Dictionary<TKey, TValue> dictionary)     {         _data = dictionary;     }      private Dictionary<TKey, TValue> _data;      public Dictionary<TKey, TValue> Data     {         get { return this._data; }     }      private KeyValuePair<TKey, TValue>? _selectedKey = null;     public KeyValuePair<TKey, TValue>? SelectedKey     {         get { return _selectedKey; }         set         {             _selectedKey = value;             RaisePropertyChanged("SelectedKey");             RaisePropertyChanged("SelectedValue");         }     }      public TValue SelectedValue     {         get         {             return _data[SelectedKey.Value.Key];         }         set         {             _data[SelectedKey.Value.Key] = value;             RaisePropertyChanged("SelectedValue");         }     } } 

}

Unfortunately I still don't know how to pass "general" Dictionary Objects.. any ideas?

Thank you!

Cheers

like image 670
Joseph jun. Melettukunnel Avatar asked Jul 08 '09 15:07

Joseph jun. Melettukunnel


2 Answers

If you really want to make an ObservableDictionary, I'd suggest creating a class that implements both IDictionary and INotifyCollectionChanged. You can always use a Dictionary internally to implement the methods of IDictionary so that you won't have to reimplement that yourself.

Since you have full knowledge of when the internal Dictionary changes, you can use that knowledge to implement INotifyCollectionChanged.

like image 121
Andy Avatar answered Sep 20 '22 20:09

Andy


  • ObservableDictionary(Of TKey, TValue) - VB.NET
  • ObservableDictionary<TKey, TValue> - C#
like image 31
Shimmy Weitzhandler Avatar answered Sep 20 '22 20:09

Shimmy Weitzhandler