/// <inheritdoc/> public IObservable <IObservedChange <object, object> > GetNotificationForProperty(object sender, Expression expression, string propertyName, bool beforeChanged = false) { var obj = sender as NSObject; if (obj == null) { throw new ArgumentException("Sender isn't an NSObject"); } return(Observable.Create <IObservedChange <object, object> >(subj => { var bobs = new BlockObserveValueDelegate((key, s, _) => { subj.OnNext(new ObservedChange <object, object>(s, expression)); }); var pin = GCHandle.Alloc(bobs); var keyPath = (NSString)FindCocoaNameFromNetName(sender.GetType(), propertyName); obj.AddObserver(bobs, keyPath, beforeChanged ? NSKeyValueObservingOptions.Old : NSKeyValueObservingOptions.New, IntPtr.Zero); return Disposable.Create(() => { obj.RemoveObserver(bobs, keyPath); pin.Free(); }); })); }
public IObservable<IObservedChange<object, object>> GetNotificationForProperty(object sender, Expression expression, bool beforeChanged = false) { var obj = sender as NSObject; if (obj == null) { throw new ArgumentException("Sender isn't an NSObject"); } var propertyName = expression.GetMemberInfo().Name; return Observable.Create<IObservedChange<object, object>>(subj => { var bobs = new BlockObserveValueDelegate((key,s,_) => { subj.OnNext(new ObservedChange<object, object>(s, expression)); }); var pin = GCHandle.Alloc(bobs); var keyPath = (NSString)findCocoaNameFromNetName(sender.GetType(), propertyName); obj.AddObserver(bobs, keyPath, beforeChanged ? NSKeyValueObservingOptions.Old : NSKeyValueObservingOptions.New, IntPtr.Zero); return Disposable.Create(() => { obj.RemoveObserver(bobs, keyPath); pin.Free(); }); }); }