InstancedBinding?IBinding.Initiate( IAvaloniaObject target, AvaloniaProperty targetProperty, object anchor, bool enableDataValidation) { if (ResourceKey is null) { return(null); } var control = target as IStyledElement ?? _anchor as IStyledElement; if (control != null) { var source = control.GetResourceObservable(ResourceKey, GetConverter(targetProperty)); return(InstancedBinding.OneWay(source)); } else if (_resourceProvider is object) { var source = _resourceProvider.GetResourceObservable(ResourceKey, GetConverter(targetProperty)); return(InstancedBinding.OneWay(source)); } return(null); }
/// <inheritdoc/> public InstancedBinding Initiate( IAvaloniaObject target, AvaloniaProperty targetProperty, object anchor = null, bool enableDataValidation = false) { if (Converter == null) { throw new NotSupportedException("MultiBinding without Converter not currently supported."); } var targetType = targetProperty?.PropertyType ?? typeof(object); var children = Bindings.Select(x => x.Initiate(target, null)); var input = children.Select(x => x.Subject).CombineLatest().Select(x => ConvertValue(x, targetType)); var mode = Mode == BindingMode.Default ? targetProperty.GetMetadata(target.GetType()).DefaultBindingMode : Mode; switch (mode) { case BindingMode.OneTime: return(InstancedBinding.OneTime(input, Priority)); case BindingMode.OneWay: return(InstancedBinding.OneWay(input, Priority)); default: throw new NotSupportedException( "MultiBinding currently only supports OneTime and OneWay BindingMode."); } }
InstancedBinding?IBinding.Initiate( IAvaloniaObject target, AvaloniaProperty?targetProperty, object?anchor, bool enableDataValidation) { if (ResourceKey is null) { return(null); } var control = target as IResourceHost ?? _anchor as IResourceHost; if (control != null) { var source = control.GetResourceObservable(ResourceKey, GetConverter(targetProperty)); return(InstancedBinding.OneWay(source, _priority)); } else if (_anchor is IResourceProvider resourceProvider) { var source = resourceProvider.GetResourceObservable(ResourceKey, GetConverter(targetProperty)); return(InstancedBinding.OneWay(source, _priority)); } return(null); }
public InstancedBinding Initiate( IAvaloniaObject target, AvaloniaProperty targetProperty, object anchor = null, bool enableDataValidation = false) { return(InstancedBinding.OneWay(_source)); }
private IBinding CreateMockBinding(AvaloniaProperty property) { var subject = new Subject <object>(); var descriptor = InstancedBinding.OneWay(subject); var binding = Mock.Of <IBinding>(x => x.Initiate(It.IsAny <IAvaloniaObject>(), property, null, false) == descriptor); return(binding); }
public InstancedBinding ItemsSelector(object item) { if (ItemsSource != null) { var obs = new ExpressionObserver(item, ItemsSource.Path); return(InstancedBinding.OneWay(obs, BindingPriority.Style)); } return(null); }
public void Setter_Should_Apply_Binding_To_Property() { var control = new TextBlock(); var subject = new BehaviorSubject <object>("foo"); var descriptor = InstancedBinding.OneWay(subject); var binding = Mock.Of <IBinding>(x => x.Initiate(control, TextBlock.TextProperty, null, false) == descriptor); var style = Mock.Of <IStyle>(); var setter = new Setter(TextBlock.TextProperty, binding); setter.Apply(style, control, null); Assert.Equal("foo", control.Text); }
public void Setter_Should_Handle_Binding_Producing_UnsetValue() { var control = new TextBlock(); var subject = new BehaviorSubject <object>(AvaloniaProperty.UnsetValue); var descriptor = InstancedBinding.OneWay(subject); var binding = Mock.Of <IBinding>(x => x.Initiate(control, TextBlock.TagProperty, null, false) == descriptor); var style = Mock.Of <IStyle>(); var setter = new Setter(TextBlock.TagProperty, binding); setter.Instance(control).Start(false); Assert.Equal("", control.Text); }
InstancedBinding IBinding.Initiate( IAvaloniaObject target, AvaloniaProperty targetProperty, object anchor, bool enableDataValidation) { var control = target as IResourceNode ?? _anchor; if (control != null) { return(InstancedBinding.OneWay(control.GetResourceObservable(ResourceKey))); } return(null); }
public InstancedBinding ItemsSelector(object item) { if (ItemsSource != null) { var obs = ItemsSource switch { Binding reflection => ExpressionObserverBuilder.Build(item, reflection.Path), CompiledBindingExtension compiled => new ExpressionObserver(item, compiled.Path.BuildExpression(false)), _ => throw new InvalidOperationException("TreeDataTemplate currently only supports Binding and CompiledBindingExtension!") }; return(InstancedBinding.OneWay(obs, BindingPriority.Style)); } return(null); }
private InstancedBinding Clone(InstancedBinding sourceInstance, IStyle style, IObservable <bool> activator) { if (activator != null) { var description = style?.ToString(); switch (sourceInstance.Mode) { case BindingMode.OneTime: if (sourceInstance.Observable != null) { var activated = new ActivatedObservable(activator, sourceInstance.Observable, description); return(InstancedBinding.OneTime(activated, BindingPriority.StyleTrigger)); } else { var activated = new ActivatedValue(activator, sourceInstance.Value, description); return(InstancedBinding.OneTime(activated, BindingPriority.StyleTrigger)); } case BindingMode.OneWay: { var activated = new ActivatedObservable(activator, sourceInstance.Observable, description); return(InstancedBinding.OneWay(activated, BindingPriority.StyleTrigger)); } case BindingMode.OneWayToSource: { var activated = new ActivatedSubject(activator, sourceInstance.Subject, description); return(InstancedBinding.OneWayToSource(activated, BindingPriority.StyleTrigger)); } case BindingMode.TwoWay: { var activated = new ActivatedSubject(activator, sourceInstance.Subject, description); return(InstancedBinding.TwoWay(activated, BindingPriority.StyleTrigger)); } default: throw new NotSupportedException("Unsupported BindingMode."); } } else { return(sourceInstance.WithPriority(BindingPriority.Style)); } }
public InstancedBinding ItemsSelector(object item) { var obs = new ExpressionObserver(item, nameof(Node.Children)); return(InstancedBinding.OneWay(obs)); }
public InstancedBinding ItemsSelector(object item) { var obs = ExpressionObserver.Create(item, o => (o as Node).Children); return(InstancedBinding.OneWay(obs)); }
public InstancedBinding Initiate(IAvaloniaObject target, AvaloniaProperty targetProperty, object anchor = null, bool enableDataValidation = false) { return(InstancedBinding.OneWay(new StaticBindingObservable(Value))); }