Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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.");
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
 public InstancedBinding Initiate(
     IAvaloniaObject target,
     AvaloniaProperty targetProperty,
     object anchor             = null,
     bool enableDataValidation = false)
 {
     return(InstancedBinding.OneWay(_source));
 }
Exemple #5
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #11
0
        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));
            }
        }
Exemple #12
0
            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)));
 }