コード例 #1
0
        /// <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();
                });
            }));
        }
コード例 #2
0
        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();
                });
            });
        }