Exemple #1
0
        /// <summary>
        /// Adds a new binding to the control with an indirect binding to the provided <paramref name="objectValue"/>
        /// </summary>
        /// <param name="controlBinding">Binding to get/set the value from the control.</param>
        /// <param name="objectValue">Object value to bind to.</param>
        /// <param name="objectBinding">Binding to get/set the value from the <paramref name="objectValue"/>.</param>
        /// <param name="mode">Mode of the binding.</param>
        /// <param name="defaultControlValue">Default control value to set to the objectValue, if the value of the control property is null.</param>
        /// <param name="defaultContextValue">Default context value to set to the control, if the objectValue or value of the objectBinding is null.</param>
        public DualBinding <T> Bind <T>(IndirectBinding <T> controlBinding, object objectValue, IndirectBinding <T> objectBinding, DualBindingMode mode = DualBindingMode.TwoWay, T defaultControlValue = default(T), T defaultContextValue = default(T))
        {
            var valueBinding = new ObjectBinding <object, T>(objectValue, objectBinding)
            {
                SettingNullValue = defaultContextValue,
                GettingNullValue = defaultControlValue
            };

            return(Bind(controlBinding, valueBinding, mode));
        }
Exemple #2
0
        public DualBinding Bind(IndirectBinding controlBinding, object objectValue, IndirectBinding objectBinding, DualBindingMode mode = DualBindingMode.TwoWay, object defaultControlValue = null, object defaultContextValue = null)
        {
            var valueBinding = new ObjectBinding(objectValue, objectBinding)
            {
                SettingNullValue = defaultContextValue,
                GettingNullValue = defaultControlValue
            };

            return(Bind(controlBinding, valueBinding, mode));
        }
Exemple #3
0
        /// <summary>
        /// Binds to an object's <see cref="IBindable.DataContext"/> using the specified <paramref name="dataContextBinding"/>.
        /// </summary>
        /// <remarks>
        /// This creates a <see cref="DualBinding{TValue}"/> between a binding to the specified <paramref name="dataContextBinding"/> and this binding.
        /// Since the data context changes, the binding passed for the data context binding is an indirect binding, in that it is reused.
        /// The binding is added to the <see cref="IBindable.Bindings"/> collection.
        /// </remarks>
        /// <returns>A new dual binding that binds the <paramref name="dataContextBinding"/> to this control binding.</returns>
        /// <param name="dataContextBinding">Binding to get/set values from/to the control's data context.</param>
        /// <param name="mode">Dual binding mode.</param>
        /// <param name="defaultControlValue">Default control value.</param>
        /// <param name="defaultContextValue">Default context value.</param>
        public DualBinding <TValue> BindDataContext(IndirectBinding <TValue> dataContextBinding, DualBindingMode mode = DualBindingMode.TwoWay, TValue defaultControlValue = default(TValue), TValue defaultContextValue = default(TValue))
        {
            var control = DataItem;

            if (control == null)
            {
                throw new InvalidOperationException("Binding must be attached to a control");
            }
            var contextBinding = new BindableBinding <IBindable, object>(control, Binding.Delegate((IBindable w) => w.DataContext, null, (w, h) => w.DataContextChanged += h, (w, h) => w.DataContextChanged -= h));
            var valueBinding   = new ObjectBinding <object, TValue>(control.DataContext, dataContextBinding)
            {
                GettingNullValue = defaultControlValue,
                SettingNullValue = defaultContextValue,
                DataItem         = contextBinding.DataValue
            };
            DualBinding <TValue> binding = Bind(sourceBinding: valueBinding, mode: mode);

            contextBinding.DataValueChanged += delegate
            {
                ((ObjectBinding <object, TValue>)binding.Source).DataItem = contextBinding.DataValue;
            };
            control.Bindings.Add(contextBinding);
            return(binding);
        }
Exemple #4
0
        public DualBinding Bind(IndirectBinding controlBinding, IndirectBinding dataContextBinding, DualBindingMode mode = DualBindingMode.TwoWay, object defaultControlValue = null, object defaultContextValue = null)
        {
            var binding = new ObjectBinding(this, controlBinding);

            return(binding.Bind(dataContextBinding, mode, defaultControlValue, defaultContextValue));
        }
Exemple #5
0
        public DualBinding Bind(IndirectBinding controlBinding, DirectBinding valueBinding, DualBindingMode mode = DualBindingMode.TwoWay)
        {
            var binding = new ObjectBinding(this, controlBinding);

            return(binding.Bind(valueBinding: valueBinding, mode: mode));
        }
Exemple #6
0
 public ObjectBindingChangedEventArgs(ObjectBinding <T, TValue> parent)
 {
     _parent = parent;
 }