public static IEnumerable <Func <IPerson, IAddress, BindingBase> > GetBindingFactories() { yield return((targetObject, sourceObject) => new Binding(targetObject, "Name", sourceObject, "Line1")); yield return((targetObject, sourceObject) => new TypedBinding <IPerson, IAddress>(targetObject, x => x.Name, sourceObject, x => x.Line1)); yield return(delegate(IPerson targetObject, IAddress sourceObject) { var multiBinding = new MultiBinding(targetObject, "Name"); multiBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); multiBinding.Converter = new NameAndAddressMultiValueConverter(); return multiBinding; }); yield return(delegate(IPerson targetObject, IAddress sourceObject) { var typedMultiBinding = new TypedMultiBinding <IPerson>(targetObject, x => x.Name); typedMultiBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); typedMultiBinding.Converter = new NameAndAddressMultiValueConverter(); return typedMultiBinding; }); }
public static IEnumerable <BindingBase> GetBindings(WeakReference targetObject, WeakReference sourceObject) { yield return(new Binding(targetObject.Target, "Address.Line2", sourceObject.Target, "Line1")); yield return(new TypedBinding <IPerson, IAddress>(targetObject.Target as IPerson, x => x.Address.Line2, sourceObject.Target as IAddress, x => x.Line1)); var multiBinding = new MultiBinding(targetObject.Target, "Name"); multiBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line1" }); multiBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line2" }); multiBinding.Converter = new NameAndAddressMultiValueConverter(); yield return(multiBinding); var multiTypedBinding = new TypedMultiBinding <IPerson>(targetObject.Target as IPerson, x => x.Name); multiTypedBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line1" }); multiTypedBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line2" }); multiTypedBinding.Converter = new NameAndAddressMultiValueConverter(); yield return(multiTypedBinding); }
public static IEnumerable <Func <IPerson, IAddress, MultiSourceBinding> > GetBindingFactories() { yield return(delegate(IPerson targetObject, IAddress sourceObject) { var binding = new MultiBinding(targetObject, "Name"); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line2" }); return binding; }); yield return(delegate(IPerson targetObject, IAddress sourceObject) { var binding = new TypedMultiBinding <IPerson>(targetObject, x => x.Name); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line2" }); return binding; }); }
public static IEnumerable<Func<IPerson, IAddress, MultiSourceBinding>> GetBindingFactories() { yield return delegate(IPerson targetObject, IAddress sourceObject) { var binding = new MultiBinding(targetObject, "Name"); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line2" }); return binding; }; yield return delegate(IPerson targetObject, IAddress sourceObject) { var binding = new TypedMultiBinding<IPerson>(targetObject, x => x.Name); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); binding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line2" }); return binding; }; }
public static IEnumerable<BindingBase> GetBindings(WeakReference targetObject, WeakReference sourceObject) { yield return new Binding(targetObject.Target, "Address.Line2", sourceObject.Target, "Line1"); yield return new TypedBinding<IPerson, IAddress>(targetObject.Target as IPerson, x => x.Address.Line2, sourceObject.Target as IAddress, x => x.Line1); var multiBinding = new MultiBinding(targetObject.Target, "Name"); multiBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line1" }); multiBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line2" }); multiBinding.Converter = new NameAndAddressMultiValueConverter(); yield return multiBinding; var multiTypedBinding = new TypedMultiBinding<IPerson>(targetObject.Target as IPerson, x => x.Name); multiTypedBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line1" }); multiTypedBinding.Sources.Add(new Binding() { SourceObject = sourceObject.Target, SourcePath = "Line2" }); multiTypedBinding.Converter = new NameAndAddressMultiValueConverter(); yield return multiTypedBinding; }
public static IEnumerable<Func<IPerson, IAddress, BindingBase>> GetBindingFactories() { yield return delegate(IPerson targetObject, IAddress sourceObject) { //the second-level binding is bound to Line1, Line2, and Line3 of the Address object, all of which are separated by commas var secondLevelBinding = new MultiBinding(); secondLevelBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); secondLevelBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line2" }); secondLevelBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line3" }); secondLevelBinding.Converter = new SeparatorConverter(","); //Person.Details is bound to their Name, Age, Gender, and the full address as determined by the second level binding, all //of which are separated by tildes var firstLevelBinding = new MultiBinding(targetObject, "Details"); firstLevelBinding.Sources.Add(new Binding() { SourceObject = targetObject, SourcePath = "Name" }); firstLevelBinding.Sources.Add(new Binding() { SourceObject = targetObject, SourcePath = "Age" }); firstLevelBinding.Sources.Add(new Binding() { SourceObject = targetObject, SourcePath = "Gender", Converter = new GenderConverter() }); firstLevelBinding.Sources.Add(secondLevelBinding); firstLevelBinding.Converter = new SeparatorConverter("~"); return firstLevelBinding; }; yield return delegate(IPerson targetObject, IAddress sourceObject) { //the second-level binding is bound to Line1, Line2, and Line3 of the Address object, all of which are separated by commas var secondLevelBinding = new TypedMultiBinding<object>(); secondLevelBinding.Sources.Add(new TypedBinding<object, IAddress>() { SourceObject = sourceObject, SourceExpression = x => x.Line1 }); secondLevelBinding.Sources.Add(new TypedBinding<object, IAddress>() { SourceObject = sourceObject, SourceExpression = x => x.Line2 }); secondLevelBinding.Sources.Add(new TypedBinding<object, IAddress>() { SourceObject = sourceObject, SourceExpression = x => x.Line3 }); secondLevelBinding.Converter = new SeparatorConverter(","); //Person.Details is bound to their Name, Age, Gender, and the full address as determined by the second level binding, all //of which are separated by tildes var firstLevelBinding = new TypedMultiBinding<IPerson>(targetObject, x => x.Details); firstLevelBinding.Sources.Add(new TypedBinding<object, IPerson>() { SourceObject = targetObject, SourceExpression = x => x.Name }); firstLevelBinding.Sources.Add(new TypedBinding<object, IPerson>() { SourceObject = targetObject, SourceExpression = x => x.Age }); firstLevelBinding.Sources.Add(new TypedBinding<object, IPerson>() { SourceObject = targetObject, SourceExpression = x => x.Gender, Converter = new GenderConverter() }); firstLevelBinding.Sources.Add(secondLevelBinding); firstLevelBinding.Converter = new SeparatorConverter("~"); return firstLevelBinding; }; }
private static void AddSimpleTypedMultiBinding(Customer customer, OutputSink outputSink, BindingManager bindingManager) { #region Simple TypedMultiBinding var binding = new TypedMultiBinding <OutputSink>(outputSink, o => o.Output); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Name)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Gender)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.BirthDate)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Address.Line1)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Address.Line2)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Address.Line3)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Address.Line4)); binding.Sources.Add(new TypedBinding <object, Customer>(null, null, customer, c => c.Address.PostCode)); binding.Mode = BindingMode.OneWayToTarget; binding.Converter = new OutputConverter(); bindingManager.Bindings.Add(binding); #endregion }
public static IEnumerable<Func<IPerson, IAddress, BindingBase>> GetBindingFactories() { yield return (targetObject, sourceObject) => new Binding(targetObject, "Name", sourceObject, "Line1"); yield return (targetObject, sourceObject) => new TypedBinding<IPerson, IAddress>(targetObject, x => x.Name, sourceObject, x => x.Line1); yield return delegate(IPerson targetObject, IAddress sourceObject) { var multiBinding = new MultiBinding(targetObject, "Name"); multiBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); multiBinding.Converter = new NameAndAddressMultiValueConverter(); return multiBinding; }; yield return delegate(IPerson targetObject, IAddress sourceObject) { var typedMultiBinding = new TypedMultiBinding<IPerson>(targetObject, x => x.Name); typedMultiBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); typedMultiBinding.Converter = new NameAndAddressMultiValueConverter(); return typedMultiBinding; }; }
public static IEnumerable <Func <IPerson, IAddress, BindingBase> > GetBindingFactories() { yield return(delegate(IPerson targetObject, IAddress sourceObject) { //the second-level binding is bound to Line1, Line2, and Line3 of the Address object, all of which are separated by commas var secondLevelBinding = new MultiBinding(); secondLevelBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line1" }); secondLevelBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line2" }); secondLevelBinding.Sources.Add(new Binding() { SourceObject = sourceObject, SourcePath = "Line3" }); secondLevelBinding.Converter = new SeparatorConverter(","); //Person.Details is bound to their Name, Age, Gender, and the full address as determined by the second level binding, all //of which are separated by tildes var firstLevelBinding = new MultiBinding(targetObject, "Details"); firstLevelBinding.Sources.Add(new Binding() { SourceObject = targetObject, SourcePath = "Name" }); firstLevelBinding.Sources.Add(new Binding() { SourceObject = targetObject, SourcePath = "Age" }); firstLevelBinding.Sources.Add(new Binding() { SourceObject = targetObject, SourcePath = "Gender", Converter = new GenderConverter() }); firstLevelBinding.Sources.Add(secondLevelBinding); firstLevelBinding.Converter = new SeparatorConverter("~"); return firstLevelBinding; }); yield return(delegate(IPerson targetObject, IAddress sourceObject) { //the second-level binding is bound to Line1, Line2, and Line3 of the Address object, all of which are separated by commas var secondLevelBinding = new TypedMultiBinding <object>(); secondLevelBinding.Sources.Add(new TypedBinding <object, IAddress>() { SourceObject = sourceObject, SourceExpression = x => x.Line1 }); secondLevelBinding.Sources.Add(new TypedBinding <object, IAddress>() { SourceObject = sourceObject, SourceExpression = x => x.Line2 }); secondLevelBinding.Sources.Add(new TypedBinding <object, IAddress>() { SourceObject = sourceObject, SourceExpression = x => x.Line3 }); secondLevelBinding.Converter = new SeparatorConverter(","); //Person.Details is bound to their Name, Age, Gender, and the full address as determined by the second level binding, all //of which are separated by tildes var firstLevelBinding = new TypedMultiBinding <IPerson>(targetObject, x => x.Details); firstLevelBinding.Sources.Add(new TypedBinding <object, IPerson>() { SourceObject = targetObject, SourceExpression = x => x.Name }); firstLevelBinding.Sources.Add(new TypedBinding <object, IPerson>() { SourceObject = targetObject, SourceExpression = x => x.Age }); firstLevelBinding.Sources.Add(new TypedBinding <object, IPerson>() { SourceObject = targetObject, SourceExpression = x => x.Gender, Converter = new GenderConverter() }); firstLevelBinding.Sources.Add(secondLevelBinding); firstLevelBinding.Converter = new SeparatorConverter("~"); return firstLevelBinding; }); }
private static void AddSimpleTypedMultiBinding(Customer customer, OutputSink outputSink, BindingManager bindingManager) { #region Simple TypedMultiBinding var binding = new TypedMultiBinding<OutputSink>(outputSink, o => o.Output); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Name)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Gender)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.BirthDate)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Address.Line1)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Address.Line2)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Address.Line3)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Address.Line4)); binding.Sources.Add(new TypedBinding<object, Customer>(null, null, customer, c => c.Address.PostCode)); binding.Mode = BindingMode.OneWayToTarget; binding.Converter = new OutputConverter(); bindingManager.Bindings.Add(binding); #endregion }