This morning I implemented the following class (also attached), so that I can create a WPF application that can observe the values of a Dictionary. My question is: is there a clean way to implement the other overloaded constructors to Dictionary?
#light
open System.Collections.Generic
open System.Collections.ObjectModel
type ObservableDictionary() =
inherit Dictionary()
let fireOnAdded, OnAdded = Event.create()
let fireOnCleared, OnCleared = Event.create()
let fireOnRemoved, OnRemoved = Event.create()
override x.Add(key,value) = base.Add(key,value); fireOnAdded (key,value)
override x.Clear() = base.Clear(); fireOnCleared ()
override x.Remove(key) =
match x.TryGetValue(key) with
| true, value -> if (base.Remove key)
then fireOnRemoved(value); true
else false
| _ -> base.Remove key
member x.ObservableValues =
let obs = ObservableCollection(x.Values)
OnAdded.Add (fun (_,value) -> obs.Add value)
OnRemoved.Add (fun (value) -> obs.Remove value |> ignore)
OnCleared.Add (fun () -> obs.Clear())
ReadOnlyObservableCollection(obs)