WPF PropertyGrid 仅在成员非空时抛出奇怪的 NullReferenceException
WPF PropertyGrid throws weird NullReferenceException ONLY when a member is non-null
当存在嵌套集合属性时,我在 XCeed WPF 属性网格控件中遇到异常。该行为定义明确且可重现,但非常奇怪。
这里是一个例子class结构:
Public Class MyTestBigClass
Public Property FirstProperty As New List(Of MyTestLittleClass)
End Class
Public Class MyTestLittleClass
Public Property SecondProperty As New List(Of Integer)
End Class
我创建了一个新的 MyTestBigClass 并将其绑定到 PropertyGrid。我转到那个表单,单击 FirstProperty 行,这会弹出 Collection Editor 对话框。我点击 "Add" 几次以在集合中创建一些成员。然后我关闭对话框。到目前为止效果很好,我可以确认对 FirstProperty 的预期更改确实发生了。
然后我什么都不做,只是再次单击 FirstProperty 行。现在,集合编辑器不再返回显示我刚刚添加到该集合的成员,而是得到一个 NullReferenceException。
这是奇怪的部分。
如果我将倒数第二行改为这样说,则不会发生异常:
Public Property SecondProperty As List(Of Integer)
这摆脱了此控件中的 NullReferenceException,让我可以很好地使用绑定的 PropertyGrid。但这是以代码中其他地方出现问题为代价的,因为 SecondProperty 现在大部分时间都为空(也就是 VB 中的 Nothing)。
更糟糕的是,如果我初始化 SecondProperty 任何地方,同样的异常会再次出现。即使我创建了一个构造函数(一个 VB New sub)并在其中创建了对象,不知何故让该成员为非 null 仍然会使 属性 网格自身崩溃。
这是怎么回事?这是控制代码中的错误还是我使用错误?正确的修复方法是什么?
发现这个错误存在于 Xceed PropertyGrid 控件中。已在 2017 年 6 月 5 日发布的付费版本中修复。版本 3.4.17280.14430 的发行说明部分说:
In PropertyGrid, opening a CollectionControl editor will no longer crash when the items of the Collection contains List properties.
当存在嵌套集合属性时,我在 XCeed WPF 属性网格控件中遇到异常。该行为定义明确且可重现,但非常奇怪。
这里是一个例子class结构:
Public Class MyTestBigClass
Public Property FirstProperty As New List(Of MyTestLittleClass)
End Class
Public Class MyTestLittleClass
Public Property SecondProperty As New List(Of Integer)
End Class
我创建了一个新的 MyTestBigClass 并将其绑定到 PropertyGrid。我转到那个表单,单击 FirstProperty 行,这会弹出 Collection Editor 对话框。我点击 "Add" 几次以在集合中创建一些成员。然后我关闭对话框。到目前为止效果很好,我可以确认对 FirstProperty 的预期更改确实发生了。
然后我什么都不做,只是再次单击 FirstProperty 行。现在,集合编辑器不再返回显示我刚刚添加到该集合的成员,而是得到一个 NullReferenceException。
这是奇怪的部分。
如果我将倒数第二行改为这样说,则不会发生异常:
Public Property SecondProperty As List(Of Integer)
这摆脱了此控件中的 NullReferenceException,让我可以很好地使用绑定的 PropertyGrid。但这是以代码中其他地方出现问题为代价的,因为 SecondProperty 现在大部分时间都为空(也就是 VB 中的 Nothing)。
更糟糕的是,如果我初始化 SecondProperty 任何地方,同样的异常会再次出现。即使我创建了一个构造函数(一个 VB New sub)并在其中创建了对象,不知何故让该成员为非 null 仍然会使 属性 网格自身崩溃。
这是怎么回事?这是控制代码中的错误还是我使用错误?正确的修复方法是什么?
发现这个错误存在于 Xceed PropertyGrid 控件中。已在 2017 年 6 月 5 日发布的付费版本中修复。版本 3.4.17280.14430 的发行说明部分说:
In PropertyGrid, opening a CollectionControl editor will no longer crash when the items of the Collection contains List properties.