在 PropertyDescriptor 中的 ResetValue 之后强制更新 属性 网格
Force property grid to update after ResetValue in PropertyDescriptor
我在 winforms 中使用 属性 网格来显示我的自定义类型的属性 - 我使用自定义类型描述符(实现接口 ICustomTypeDescriptor)来做到这一点,以便我的 public 属性显示对象,每个对象都有自己的 PropertyDescriptor 实现。
实现接近此处描述的代码:http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert
这是因为我可以看到所有属性并且它们在 属性 网格中有自己的编辑器但是我有关于如何实现
的问题
public override void ResetValue(object component)
基于基础 PropertyDescriptor。
目前我是这样实现的:
public override void ResetValue(object component)
{
if (!_isReadOnly && _dataDefault != null)
{
SetValue(component, _dataDefault.Value);
}
}
然而,尽管数据确实得到了更新,但 属性 网格显示只显示旧值,除非我刷新它 - 我无法弄清楚 属性 网格将如何更新或获取要知道值已更改,是否有某种事件可以刷新可以从 PropertyDescriptor 实现触发的单元格?
我在这里发现了一个类似的问题:PropertyGrid doesn't notice properties changed in code?
我采用的解决方案是实施 INotifyPropertyChanged 通知事件并将其注册到 属性 网格以进行刷新。
我在 winforms 中使用 属性 网格来显示我的自定义类型的属性 - 我使用自定义类型描述符(实现接口 ICustomTypeDescriptor)来做到这一点,以便我的 public 属性显示对象,每个对象都有自己的 PropertyDescriptor 实现。
实现接近此处描述的代码:http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert
这是因为我可以看到所有属性并且它们在 属性 网格中有自己的编辑器但是我有关于如何实现
的问题public override void ResetValue(object component)
基于基础 PropertyDescriptor。
目前我是这样实现的:
public override void ResetValue(object component)
{
if (!_isReadOnly && _dataDefault != null)
{
SetValue(component, _dataDefault.Value);
}
}
然而,尽管数据确实得到了更新,但 属性 网格显示只显示旧值,除非我刷新它 - 我无法弄清楚 属性 网格将如何更新或获取要知道值已更改,是否有某种事件可以刷新可以从 PropertyDescriptor 实现触发的单元格?
我在这里发现了一个类似的问题:PropertyGrid doesn't notice properties changed in code?
我采用的解决方案是实施 INotifyPropertyChanged 通知事件并将其注册到 属性 网格以进行刷新。