예제 #1
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.");
            }
        }
 public InstancedBinding Initiate(
     IAvaloniaObject target,
     AvaloniaProperty targetProperty,
     object anchor             = null,
     bool enableDataValidation = false)
 {
     return(InstancedBinding.OneTime(_source));
 }
예제 #3
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));
            }
        }
예제 #4
0
 /// <summary>
 /// Selects the child items of an item.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <returns>The child items, or null if no child items.</returns>
 public InstancedBinding ItemsSelector(object item)
 {
     return(InstancedBinding.OneTime(this?._itemsSelector(item)));
 }