public static void SetPropertyBinding(FrameworkElement element, SetterValueBindingHelper value) { if (null == element) { throw new ArgumentNullException("element"); } element.SetValue(PropertyBindingProperty, value); }
/// <summary> /// Applies the Binding represented by the SetterValueBindingHelper. /// </summary> /// <param name="element">Element to apply the Binding to.</param> /// <param name="item">SetterValueBindingHelper representing the Binding.</param> private static void ApplyBinding(FrameworkElement element, SetterValueBindingHelper item) { if ((null == item.Property) || (null == item.Binding)) { throw new ArgumentException( "SetterValueBindingHelper's Property and Binding must both be set to non-null values."); } // Get the type on which to set the Binding TypeInfo typeInfo = null; if (null == item.Type) { // No type specified; setting for the specified element typeInfo = element.GetType().GetTypeInfo(); } else { // Try to get the type from the type system var type = System.Type.GetType(item.Type); if (type != null) { typeInfo = type.GetTypeInfo(); } if (type == null) { // Search for the type in the list of assemblies foreach (var assembly in AssembliesToSearch) { // Match on short or full name typeInfo = assembly.DefinedTypes.FirstOrDefault(t => (t.FullName == item.Type) || (t.Name == item.Type)); if (null != typeInfo) { // Found; done searching break; } } if (null == typeInfo) { // Unable to find the requested type anywhere throw new ArgumentException( string.Format( CultureInfo.CurrentCulture, "Unable to access type \"{0}\". Try using an assembly qualified type name.", item.Type)); } } } // Get the DependencyProperty for which to set the Binding DependencyProperty property = null; var field = GetDPField(item.Property, typeInfo); if (null != field) { property = field.GetValue(null) as DependencyProperty; } if (null == property) { // Unable to find the requsted property throw new ArgumentException( string.Format( CultureInfo.CurrentCulture, "Unable to access DependencyProperty \"{0}\" on type \"{1}\".", item.Property, typeInfo.Name)); } // Set the specified Binding on the specified property element.SetBinding(property, item.Binding); }