Binding
Обычно я использую такой код:
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
- Измените свой класс
Person
, чтобы он отображал свойства Address
с помощью некоторого кода сквозной передачи для обработки установки свойств.
(я могу предоставить образцы кода при необходимости)
Вложенные объекты «один ко многим»
Если у вас, например, было несколько адресов на человека, вы могли бы показать их вложенными в расширяемый раздел в каждой строке Person
. Для этого внутри вашего Person
у вас будет BindingList(Of Address)
, который также реализует INotifyPropertyChanged
. Не совсем то, что вы хотите, но вариант:)
Слова предостережения
Несколько заметок, если вы делаете MVP . Вам, очевидно, нужно будет иметь одинаковую ссылку на BindingList
в вашем представлении и докладчике. Кроме того, если вам нужно сбросить содержимое, я бы порекомендовал позвонить list.Clear()
вместо создания нового. Если вы создадите новый в своем докладчике, вы разорвите соединение с UltraGrid
, и вам придется заново установить свойство DataSource
в представлении.