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