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