コード例 #1
0
 public static void SetPropertyBinding(FrameworkElement element, SetterValueBindingHelper value)
 {
     if (null == element)
     {
         throw new ArgumentNullException("element");
     }
     element.SetValue(PropertyBindingProperty, value);
 }
コード例 #2
0
 public static void SetPropertyBinding(FrameworkElement element, SetterValueBindingHelper value)
 {
     if (null == element)
     {
         throw new ArgumentNullException("element");
     }
     element.SetValue(PropertyBindingProperty, value);
 }
コード例 #3
0
        /// <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 allProperties = typeInfo.GetAllProperties();
            var field = allProperties.FirstOrDefault(info => info.Name.Equals(item.Property + "Property"));

            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);
        }
コード例 #4
0
        /// <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 allProperties = typeInfo.GetAllProperties();
            var field         = allProperties.FirstOrDefault(info => info.Name.Equals(item.Property + "Property"));

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