仅当成员为非null时,WPF PropertyGrid才会抛出奇怪的NullReferenceException

时间:2017-07-07 12:31:21

标签: wpf vb.net propertygrid

当存在嵌套集合属性时,我在XCeed WPF属性网格控件中获得异常。行为定义明确,可重现,但非常奇怪。

以下是一个示例类结构:

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对话框。我点击了#34;添加"几次在集合中创建一些成员。然后我关闭对话框。到目前为止,这种方法运行良好,我可以确认FirstProperty的预期更改实际发生。

然后我什么都不做,除了再次单击FirstProperty行。现在,而不是收集编辑器回来向我展示我刚刚添加到该集合的成员,我得到一个NullReferenceException。

这是奇怪的部分。

如果我改变倒数第二行代替这一点,则不会发生异常:

Public Property SecondProperty As List(Of Integer)

这摆脱了这个控件中的NullReferenceException,让我使用绑定的PropertyGrid就好了。但是这会以代码中其他地方的问题为代价,因为SecondProperty现在大部分时间都是null(在VB中也称为Nothing)。

更糟糕的是,如果我在任何地方初始化SecondProperty ,同样的异常会回来。即使我创建了一个构造函数(一个VB New sub)并在那里创建了对象,但是以某种方式使该成员为非null仍会使属性网格本身崩溃。

发生了什么事?这是控制代码中的错误还是我使用它错了?什么是解决问题的正确方法?

1 个答案:

答案 0 :(得分:0)

发现这个bug存在于Xceed PropertyGrid控件中。已修复截至2017年6月5日发布的付费版本。版本3.4.17280.14430的发行说明部分说明:

  

在PropertyGrid中,当Collection的项目包含List属性时,打开CollectionControl编辑器将不再崩溃。