mvvm - Is it possible to implement INotifyPropertyChanged as a Type Extension in F# -


In C #, you can apply an extension method based on PropertyChangedEventHandler:

  Static class VMExts {public static zero RaisePropertyChanged (this PropertyChangedEventHandler handler, object sender, string propName) {if (handler! = Null) {handler (sender, new property change event event (proponename)); }}}  

which can be said as follows:

  class VM: INotifyPropertyChanged {Private string _someText; Public Event Threaded ChangedEventHandler Property changed; Get public string {some text {back_text text; } Set {_someText = value; Property changed Riceproperty changed (this, "some text"); }}}  

I'm trying to get something similar in F # but the syntax can not understand.

Then, this class has been given:

  type viewmodelbase () = go variable _someText = "" let's change propertyChanged = & Lt; _, _ & Gt; () With INotifyPropertyChanged interface [& LT; CLIEvent & gt;] member x.PropertyChanged = PropertyChanged Publish () = _someText and (value) set = _someText & lt member x.SomeText; - Price (X:> INotifyPropertyChanged). I have tried you:  
 class = "lang-ml prettyprint- Type "override">  propertyChangedEventHandler member x.RaisePropertyChanged (sender, propName) = if X & lt; & Gt; Null then x.Invoke (sender, property changing EventArgs (propName))  

and

  open system. CompilerServices [& LT; Extension & gt;] Type VmExtensions () = [& LT; Extension & gt;] Fixed Member Inline RaisePropertyChanged (Handler: PropertyChangedEventHandler, propName) = Handler & lt; & Gt; Tap handler Invoke (Handler, Property Change Event Event (Propaneme))  

I think that these properties can not be found as valid because the type of property is Ivant while I. Type: PropertyChangedEventHandler

So I tried:

  type eevent & lt; PropertyChangedEventHandler, PropertyChangedEventArgs & gt; With member x Riceproperty changed (sender, proponename) = if x  

But the compiler does not like to use EVET

  [ & Lt; Extension & gt;] VmExtensions () = Type [; Extensions & gt; & Lt] Fixed Member Inline RaisePropertyChanged (Handler: IEvent & LT; PropertyChangedEventHandler, PropertyChangedEventArgs & gt;, propName) = // if handler & lt; & Gt; Zero as handler  

You can increase the event through the trigger method, which is defined on event IEvent ):

  [& lt; Extension & gt;] [; Extensions & gt; & Lt] VmExtensions = Fixed member inline RaisePropertyChanged (EV: EventChangedEventHandler, _>, PropName) of the event = ev.Trigger (empty, property changed, and property agents)  

Comments