类型在您的控制之下吗?您可以添加FooUpdating
/FooUpdated
对事件?另一种选择是使用 编写自定义属性模型TypeDescriptionProvider
,但我怀疑这将是很多工作。我的第一次尝试是前/后对...
类似的东西(更新为显示 3.5 方法;参见历史以获取 2.0 示例):
class MyType : INotifyPropertyChanged, INotifyPropertyChanging
{
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangingEventHandler PropertyChanging;
protected void UpdateField<T>(ref T field, T newValue, string propertyName)
{
if (!EqualityComparer<T>.Default.Equals(field, newValue))
{
OnPropertyChanging(propertyName);
field = newValue;
OnPropertyChanged(propertyName);
}
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this,
new PropertyChangedEventArgs(propertyName));
}
protected void OnPropertyChanging(string propertyName)
{
PropertyChangingEventHandler handler = PropertyChanging;
if (handler != null) handler(this,
new PropertyChangingEventArgs(propertyName));
}
private string name;
public string Name
{
get { return name; }
set { UpdateField(ref name, value, "Name"); }
}
private DateTime dateOfBirth;
public DateTime DateOfBirth
{
get { return dateOfBirth; }
set { UpdateField(ref dateOfBirth, value, "DateOfBirth"); }
}
}
然后只需处理这两个事件并根据需要启用/禁用更新。