捆绑
我通常使用这样的某种代码:
Dim persons = new BindingList(Of Person)
UltraGrid1.DataSource = persons
绑定列表将为您处理行的添加/删除,但它不知道内部的属性Person
。要使绑定的那部分工作,您需要Person
实现INotifyPropertyChanged。这将在属性发生更改时通知超网格。代码看起来像这样(是的,不幸的是,这使得你不能使用自动实现的属性):
Private _phoneNumber As String
Public Property PhoneNumber As String
Get
Return Me._phoneNumber
End Get
Set(ByVal value As String)
If value <> _phoneNumber Then
Me._phoneNumber = value
NotifyPropertyChanged("PhoneNumber")
End If
End Set
End Property
扁平化对象层次结构
看起来你所要求的并不是直接可能的。有几个选项:
- 您在 InitializeRow 事件期间填写的 UI 中的未绑定列
- 修改您的
Person
类以Address
使用一些传递代码来公开属性以处理属性的设置。
(如果需要,我可以提供代码示例)
一对多嵌套对象
例如,如果您每个人有多个地址,则可以将它们嵌套在每Person
行下方的可展开部分中。为此,在您的内部您Person
将拥有一个BindingList(Of Address)
which 也实现了INotifyPropertyChanged
. 不完全是您想要的,而是一个选项:)
小心的话
如果您正在做MVP ,请注意一些事项。BindingList
显然,您需要在您的视图和演示者中具有相同的引用。此外,如果您需要重置内容,我建议您致电list.Clear()
而不是创建新内容。如果您在演示者中创建一个新的,您将断开与 的连接,UltraGrid
您将不得不在视图中重新设置该DataSource
属性。