/// <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)); }
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)); } }
/// <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))); }