我正在开发一个winforms应用程序,我通过ultrawingrid渲染域/对象数据。我使用绑定源将对象绑定到网格。对于简单的对象,这非常有用。
我正试图解决的问题是使用嵌套对象渲染对象,例如,Person类将具有Address类的属性。我想将地址(街道,城市,国家)的属性显示为网格上的列以及Person类的属性。
网格必须是可编辑的,任何用户更改都需要反映域对象(我正在通过绑定源进行)。
最好的方法是什么?
答案 0 :(得分:1)
<强>装订强>
我通常使用某种代码:
Dim persons = new BindingList(Of Person)
UltraGrid1.DataSource = persons
绑定列表将为您处理行的添加/删除,但它不知道Person
内的属性。要使绑定的该部分工作,您需要Person
实施INotifyPropertyChanged。这将在属性发生更改时通知ultragrid。代码看起来像这样(是的,不幸的是这使得它不能使用自动实现的属性):
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
展平对象层次结构
看起来你要求isn't directly possible。有几个选择:
Person
类,使用一些代码来公开Address
的属性,以处理属性的设置。(如果需要,我可以提供代码示例)
一对多嵌套对象
例如,如果您每个人有多个地址,则可以将它们嵌套在每个Person
行下的可扩展部分中。要执行此操作,请在Person
内部使用BindingList(Of Address)
来实现INotifyPropertyChanged
。不完全是你想要的,但是一个选项:)
提醒
如果您正在做MVP,请注意几点。显然,您需要在视图和演示者中对BindingList
具有相同的引用。此外,如果您需要重置内容,我建议您调用list.Clear()
而不是创建新内容。如果您在演示者中创建了一个新的,那么您将破坏与UltraGrid
的连接,并且您必须在视图中重新设置DataSource
属性。