Data Bound Collections in WPF
One of the joys of working with WPF is that data binding that can exist. At a couple points I've wanted to bind a Dictionary as a list. Each item in the list would have a key and only one of those items could exist based upon the the key. Thus I put together two parts that allowed me to do this. It also allows the bound data to be updated from a thread other than the UI one.
NotifyCollectionChangedBase implemented the INotifyCollectionChanged interface to allow the data bound elements in the WPF to identify the item has been updated.
The IKeyedObject just allows the KeyedCollectionBase to identify the key used in the internal dictionary.
KeyedCollectionBase implemented IList to make the collection appear as a list to the rendering elements but internally stores everything as a dictionary so only a single object with the given key exists.