public Property(string name, IPropertyHost host) { IsEnabled = true; Name = name; if (host != null) { Changed += p => { if (p != null) { host.InvokePropertyChanged(p.Name); } }; } }
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); })); }
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); })); }