private InstancedBinding Clone(InstancedBinding sourceInstance, IStyle style, IObservable <bool> activator) { InstancedBinding cloned; if (activator != null) { var description = style?.ToString(); if (sourceInstance.Subject != null) { var activated = new ActivatedSubject(activator, sourceInstance.Subject, description); cloned = new InstancedBinding(activated, sourceInstance.Mode, BindingPriority.StyleTrigger); } else if (sourceInstance.Observable != null) { var activated = new ActivatedObservable(activator, sourceInstance.Observable, description); cloned = new InstancedBinding(activated, sourceInstance.Mode, BindingPriority.StyleTrigger); } else { var activated = new ActivatedValue(activator, sourceInstance.Value, description); cloned = new InstancedBinding(activated, BindingMode.OneWay, BindingPriority.StyleTrigger); } } else { if (sourceInstance.Subject != null) { cloned = new InstancedBinding(sourceInstance.Subject, sourceInstance.Mode, BindingPriority.Style); } else if (sourceInstance.Observable != null) { cloned = new InstancedBinding(sourceInstance.Observable, sourceInstance.Mode, BindingPriority.Style); } else { cloned = new InstancedBinding(sourceInstance.Value, BindingPriority.Style); } } return(cloned); }
/// <summary> /// Applies the setter to the control. /// </summary> /// <param name="style">The style that is being applied.</param> /// <param name="control">The control.</param> /// <param name="activator">An optional activator.</param> public void Apply(IStyle style, IStyleable control, IObservable <bool> activator) { Contract.Requires <ArgumentNullException>(control != null); var description = style?.ToString(); if (Property == null) { throw new InvalidOperationException("Setter.Property must be set."); } var binding = Value as IBinding; if (binding != null) { if (activator == null) { control.Bind(Property, binding); } else { var subject = binding.CreateSubject(control, Property); var activated = new ActivatedSubject(activator, subject, description); Bind(control, Property, binding, activated); } } else { if (activator == null) { control.SetValue(Property, Value, BindingPriority.Style); } else { var activated = new ActivatedValue(activator, Value, description); control.Bind(Property, activated, BindingPriority.StyleTrigger); } } }
/// <summary> /// Applies the setter to a control. /// </summary> /// <param name="style">The style that is being applied.</param> /// <param name="control">The control.</param> /// <param name="activator">An optional activator.</param> public IDisposable Apply(IStyle style, IStyleable control, IObservable <bool> activator) { Contract.Requires <ArgumentNullException>(control != null); var description = style?.ToString(); if (Property == null) { throw new InvalidOperationException("Setter.Property must be set."); } var binding = Value as IBinding; if (binding == null) { if (activator == null) { return(control.Bind(Property, ObservableEx.SingleValue(Value), BindingPriority.Style)); } else { var activated = new ActivatedValue(activator, Value, description); return(control.Bind(Property, activated, BindingPriority.StyleTrigger)); } } else { var source = binding.Initiate(control, Property); if (source != null) { var cloned = Clone(source, style, activator); return(BindingOperations.Apply(control, Property, cloned, null)); } } return(Disposable.Empty); }