コード例 #1
0
        public Property(string name, IPropertyHost host)
        {
            IsEnabled = true;
            Name      = name;

            if (host != null)
            {
                Changed += p =>
                {
                    if (p != null)
                    {
                        host.InvokePropertyChanged(p.Name);
                    }
                };
            }
        }
コード例 #2
0
        private static IDisposable SubscribeTargetToSource(string sourceMemberName, object sourceObject, IPropertyHost target,
                                                           ExtendedProperty property)
        {
            var currentValue = sourceObject.GetType().GetRuntimeProperty(sourceMemberName).GetValue(sourceObject);

            var notifyProp = (INotifyPropertyChanged)sourceObject;

            return(Observable
                   .FromEventPattern <PropertyChangedEventHandler, PropertyChangedEventArgs>(
                       eh => notifyProp.PropertyChanged += eh, ev => notifyProp.PropertyChanged -= ev)
                   .Where(pattern => pattern.EventArgs.PropertyName == sourceMemberName)
                   .Select(_ => sourceObject.GetType().GetRuntimeProperty(sourceMemberName).GetValue(sourceObject))
                   .StartWith(currentValue)
                   .Subscribe(value =>
            {
                target.SetValue(property, value);
            }));
        }
コード例 #3
0
        private static IDisposable SubscribeSourceToTarget(string modelProperty, object model, IPropertyHost layout,
                                                           ExtendedProperty property)
        {
            var obs = layout.GetChangedObservable(property);

            return(obs.Subscribe(o =>
            {
                var propInfo = model.GetType().GetRuntimeProperty(modelProperty);
                propInfo.SetValue(model, o);
            }));
        }