Winforms 与BindingSource绑定的UltraWinGrid嵌套对象属性
我正在开发一个winforms应用程序,通过ultrawingrid渲染域/对象数据。我使用bindingsource将对象绑定到网格。对于简单的对象,这非常有效 我想弄清楚的是,呈现一个对象,其中包含嵌套对象,例如,Person类将具有Address类的属性。我想将Address(Street、City、Country)的属性与Person类的属性一起显示为网格中的列 网格必须是可编辑的,任何用户更改都需要反映在域对象上(我正在通过绑定源进行此操作)Winforms 与BindingSource绑定的UltraWinGrid嵌套对象属性,winforms,bindingsource,ultrawingrid,Winforms,Bindingsource,Ultrawingrid,我正在开发一个winforms应用程序,通过ultrawingrid渲染域/对象数据。我使用bindingsource将对象绑定到网格。对于简单的对象,这非常有效 我想弄清楚的是,呈现一个对象,其中包含嵌套对象,例如,Person类将具有Address类的属性。我想将Address(Street、City、Country)的属性与Person类的属性一起显示为网格中的列 网格必须是可编辑的,任何用户更改都需要反映在域对象上(我正在通过绑定源进行此操作) 最好的办法是什么 绑定 我通常使用以下代码
最好的办法是什么 绑定 我通常使用以下代码:
Dim persons = new BindingList(Of Person)
UltraGrid1.DataSource = persons
绑定列表将为您处理行的添加/删除,但它不知道Person
中的属性。要使绑定的这一部分正常工作,您需要Person
实现。当属性发生更改时,这将通知ultragrid。代码看起来是这样的(是的,不幸的是这使得您无法使用自动实现的属性):
Private\u电话号码作为字符串
公共属性PhoneNumber作为字符串
得到
给我回电话号码
结束
设置(ByVal值作为字符串)
如果值为电话号码,则
Me.\u phoneNumber=值
NotifyPropertyChanged(“电话号码”)
如果结束
端集
端属性
展平对象层次结构
看起来像是你要的。有几种选择:
Person
类以公开Address
的属性,并使用一些传递代码来处理属性设置person
行下的可展开部分中。要做到这一点,在人员
中有一个绑定列表(地址)
,它还实现了INotifyPropertyChanged
。不是您想要的,而是一个选项:)
警告语
如果你正在做的话,请注意几点。显然,您需要在视图和演示者中对BindingList
进行相同的引用。另外,如果需要重置内容,我建议调用list.Clear()
,而不是创建一个新的。如果您在presenter中创建了一个新的presenter,您将断开与UltraGrid
的连接,并且必须在视图中重新设置DataSource
属性
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