using System.ComponentModel;
public class Person
{
[Category("基本信息")]
[DisplayName("姓名")]
[Description("用户的全名")]
[DefaultValue("张三")]
[Browsable(true)]
public string Name { get; set; }
[Category("基本信息")]
[DisplayName("年龄")]
[Description("用户的年龄")]
[ReadOnly(false)]
[Bindable(true)]
public int Age { get; set; }
}
🔧 二、常用接口(用于数据绑定和组件交互)
接口名
功能说明
INotifyPropertyChanged
属性变更通知(用于 MVVM 数据绑定)
INotifyPropertyChanging
属性修改前通知
INotifyDataErrorInfo
支持数据验证错误通知
IDataErrorInfo
WPF 中旧的数据验证机制
IComponent
所有组件的基本接口
ISite
组件与容器间连接的接口
ICustomTypeDescriptor
自定义类型元数据暴露接口
🚀 三、常用类:描述、转换与设计支持
类名
功能
TypeDescriptor
获取类型的属性、事件、特性等(反射+元数据)
PropertyDescriptor
描述单个属性
EventDescriptor
描述事件
TypeConverter
类型转换器基类
ExpandableObjectConverter
支持对象在属性面板中展开
StringConverter, BooleanConverter
内置类型转换器
LicenseManager
控制许可证检查
Component, Container
组件与容器设计支持
EventHandlerList
高效管理多个事件委托
🧪 示例:INotifyPropertyChanged 应用(数据绑定)
public class User : INotifyPropertyChanged
{
private string name;
public string Name
{
get => name;
set
{
if (value != name)
{
name = value;
OnPropertyChanged(nameof(Name));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
🔍 四、TypeDescriptor 动态读取属性信息
var props = TypeDescriptor.GetProperties(typeof(Person));
foreach (PropertyDescriptor prop in props)
{
Console.WriteLine($"属性名: {prop.Name}, 描述: {prop.Description}, 默认值: {prop.GetValue(new Person())}");
}
发表回复