`

PropertyDescriptor and DependencyPropertyDescriptor

    博客分类:
  • WPF
wpf 
阅读更多

from MSDN:

 

PropertyDescriptor provides an abstraction of a property on a class

 

DepednencyPropertyDescriptor provides an extension to PropertyDescriptor that accounts for the additional property characteristics of a dependency property.

 

Suppose, there is a dependency property that is called "PersistenceConfigurationProperty", and it is declared in a WindowPersistence class. 

 

 

 

 

    public static readonly DependencyProperty PersistenceConfigurationProperty = DependencyProperty.RegisterAttached(
        "PersistenceConfiguration",
        typeof(ApplicationPersistence),
        typeof(WindowPersistence),
        new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, OnSetPersistenceConfigurationCallback));

 

 

and in one of the extension class that is called PersistableResourceExtension, with the help of DependencyPropertyDescriptor, we can remove the Value Changed Handler.

 

 

 DependencyPropertyDescriptor persistenceConfigurationProperty = DependencyPropertyDescriptor.FromProperty(
            WindowPersistence.PersistenceConfigurationProperty, m_targetObject.GetType());
          persistenceConfigurationProperty.RemoveValueChanged(m_targetObject, PersistenceConfigurationPropertyChanged);
 

There is another examples that use reflection and other things to change the Bindings on a DependencyProperty

 

 

 

      if (profileWarningWindow != null)
      {
        DependencyPropertyDescriptor persistenceConfiguration = DependencyPropertyDescriptor.FromProperty(WindowPersistence.PersistenceConfigurationProperty, typeof(AdminShellWindow));
        if (persistenceConfiguration != null)
        {
          Type windowPersistenceType = typeof(WindowPersistence);
          if (windowPersistenceType != null)
          {
            var method = windowPersistenceType.GetMethod("OnSetPersistenceConfigurationCallback", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);

            if (method != null)
            {
              var handler = (PropertyChangedCallback)Delegate.CreateDelegate(typeof(PropertyChangedCallback), method);
              persistenceConfiguration.RemoveValueChanged(null, handler);
            }
          }          
        }
 

 

 

The code above does not necessary means a workable code, there are something that prevent it working (either compile time or runtime);

 

 

persistenceConfiguration.RemoveValueChanged(null, handler)

 

 

the required type for the second parameter of RemoveValueChanged is EventHandler.

 

 

While you cannot convert the PropertyChangedCallback to EventHandler.

分享到:
评论

相关推荐

    Java通过PropertyDescriptor反射调用set和get方法

    `PropertyDescriptor`是JavaBeans API的一部分,主要用于处理JavaBean属性。本文将详细介绍如何使用`PropertyDescriptor`通过反射来调用Java对象的`set`和`get`方法。 首先,让我们了解`PropertyDescriptor`。`...

    Unleash PropertyGrid with Dynamic Properties and Globalization演示代码及demo

    例如,你可以创建一个自定义`PropertyDescriptor`子类,覆盖其`CanResetValue`、`GetValue`、`SetValue`等方法,然后在运行时将它添加到`PropertyGrid`的`Attributes`集合中。 2. **Globalization**: 全球化...

    PropertyGrid中的枚举显示为中文

    然后,创建一个自定义的`PropertyGrid`类,如`LocalizedPropertyGrid`,并在其中重写`CreateProperty`方法,使用`LocalizedPropertyDescriptor`替代默认的`PropertyDescriptor`: ```csharp public class ...

    手动动态添加 PropertyGrid 的数据行并显示 C# (非属性绑定方式)

    `PropertyDescriptor`是`System.ComponentModel`命名空间中的类,它代表了对象的一个属性,并提供了读取和写入属性值的方法。 ```csharp PropertyDescriptor descriptor = new CustomPropertyDescriptor(...

    Java 反射创建get set方法及反射方法的调用

    - 这个方法的作用是根据传入的类`clazz`和属性名`propertyName`,返回一个`PropertyDescriptor`对象。 - 首先尝试获取类中的字段,如果找不到对应的字段,则构建`get`和`set`方法名。 - 使用反射机制查找对应的`...

    C# dataGridVeiw多维表头

    在.NET Framework中,C#的DataGridView控件是一个用于显示数据集的强大工具,它允许用户以表格形式查看和编辑数据。然而,标准的DataGridView控件仅支持单层表头,这在处理复杂的数据结构时可能会显得不够用。...

    openbeans1.0.zip

    //import java.beans.PropertyDescriptor; import com.googlecode.openbeans.BeanInfo; import com.googlecode.openbeans.IntrospectionException; import com.googlecode.openbeans.Introspector; import ...

    Java反射中java.beans包学习总结.docx

    首先,我们需要为每个属性创建合适的`PropertyDescriptor`,然后找到对应的`PropertyEditor`,并使用`PropertyDescriptor`的`setValue()`方法将Map中的值设置到对应的属性上。以下是一个简化版的实现: ```java ...

    java基础类库文件rt.jar

    Java基础类库,也就是Java doc里面看到的所有的类的class文件。

    winform 属性可扩展性源码

    3. PropertyDescriptor子类:实现自定义的PropertyDescriptor类,如MyPropertyDescriptor,用于处理自定义属性的读写操作和设计时行为。 4. 示例应用程序:一个简单的WinForm应用程序,展示了如何使用这个自定义属性...

    PropertyGrid 下拉式和弹出编辑框的实现

    首先,`PropertyGrid`控件本身并不直接支持自定义的编辑器,但它允许我们通过实现`ITypeDescriptorContext`、`ICustomTypeDescriptor`和`PropertyDescriptor`接口来自定义属性的显示和编辑方式。这些接口帮助我们...

    基于JavaBean编辑器读取peroperties文件的实例

    // getters and setters } ``` 接着,我们需要一个`PropertyEditor`来处理`Gender`属性,因为它是枚举类型: ```java public class GenderEditor extends PropertyEditorSupport { @Override public void ...

    一个关于C# PropertyGrid增加自定义属性的范例。

    自定义`PropertyDescriptor`类可以扩展标准的属性行为,例如改变其显示名称、添加属性标签或使用自定义编辑器。我们需要重写`PropertyDescriptor`的`GetEditor`、`GetValue`和`SetValue`方法。 4. **使用Attribute...

    用反射和内省技术实现简单SpringIOC

    PropertyDescriptor pd = new PropertyDescriptor("dependency", exampleBean.getClass()); Method writeMethod = pd.getWriteMethod(); writeMethod.invoke(exampleBean, dependencyBean); ``` 此外,还可以实现一...

    WinForm控件开发总结(七)-----为复杂属性的子属性提供编辑功能[借鉴].pdf

    为了使属性浏览器支持子属性的独立编辑,我们需要实现`PropertyDescriptor`的两个方法:`GetPropertiesSupported`和`GetProperties`。`GetPropertiesSupported`返回`true`表示该属性支持子属性的编辑,而`...

    根据数据库表自动产生javabean

    PropertyDescriptor pd = new PropertyDescriptor(propertyName, clazz); Method mt = pd.getWriteMethod(); Type t [] = ms[i].getParameterTypes(); Object [] params = new Object[t.length]; for(int j...

    beanutils-1.9.3-bin

    在由JDK提供的默认的API中,有java.beans包,里面有诸如Introspector,BeanInfo,PropertyDescriptor等用来操作JavaBean的方法, 但是由Apache公司开发的BeanUtils会更常用,同时,BeanUtils还需要配合第三方日志...

    Java 内省(Introspector)深入理解

    PropertyDescriptor propDesc = new PropertyDescriptor("userName", UserInfo.class); Method methodSetUserName = propDesc.getWriteMethod(); methodSetUserName.invoke(userInfo, "wong"); ``` 这段代码首先...

    FilteredPropertyGrid_demo.zip

    `TypeDescriptor`是.NET框架中用于提供类型信息的类,而`PropertyDescriptor`则表示对象的一个属性,包括其名称、类型和可读写性等。通过重写这些类的方法,我们可以决定哪些属性应该在`PropertyGrid`中显示,哪些应...

Global site tag (gtag.js) - Google Analytics