【发布时间】:2022-06-10 21:46:12
【问题描述】:
基本上我正在加载一个 JSON 对象,其中包含在运行时可用或不可用的值组合,因此我需要知道何时修改特定属性以切换所有其他可浏览等。虽然 PropertyChange 事件是处理它的完美方式。
所以我可以添加一个事件处理程序来触发我的 expandoobject,如下所示:
Dim test As Object = new ExpandoObject
AddHandler CType(test, INotifyPropertyChanged).PropertyChanged, AddressOf expando_PropertyChanged
处理程序是最基本的
Public Shared Sub expando_PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs)
Debug.Print("Property {0} set or changed", e.PropertyName)
End Sub
到目前为止,如果我在此之后添加或修改属性,我会收到通知。 但是,如果我返回它并将其设置为我的 propertygrid 的选定对象,我将无法触发该事件。
我正在使用自定义 PropertyDescriptor 和 ICustomTypeDescriptor 为 propertygrid 设置一些其他属性,所以我认为它可能像设置属性一样简单
<RefreshProperties(RefreshProperties.All)>
但我无法找到一种方法来覆盖 PropertyDescriptor 中的 Refresh,这与 Browsable 或 readonly 不同,这有点道理,因为属性网格需要提前知道它需要可刷新。
【问题讨论】:
-
到目前为止,我发现的唯一途径是从使用 expandoobject 转换为实现我自己的动态对象并实现 INotifyPropertyChanged,我不确定这是否能解决问题(而且我已经花了很多使用 expando 建立时间)
-
您能否使用继承 ExpandoObject 并实现 INotififiable 的自定义类?
-
expando 不能被继承并且已经实现了 Inotif。这就是为什么我正在考虑动态对象
标签: vb.net propertygrid expandoobject