バインディング
私は通常、次のようなコードを使用します。
Dim persons = new BindingList(Of Person)
UltraGrid1.DataSource = persons
バインディング リストは行の追加/削除を処理しますが、 内のプロパティについては知りませんPerson
。バインディングのその部分を機能させるには、INotifyPropertyChangedPerson
を実装する必要があります。これにより、プロパティが変更されたときにウルトラグリッドに通知されます。コードは次のようになります (はい、残念ながらこれにより、自動実装されたプロパティを使用できなくなります)。
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
(必要に応じてコード サンプルを提供できます)
1 対多のネストされたオブジェクト
たとえば、1 人に複数の住所がある場合は、Person
各行の下の展開可能なセクションにネストして表示できます。これを行うには、内部に も実装しPerson
ます。まさにあなたが望むものではありませんが、オプション:)BindingList(Of Address)
INotifyPropertyChanged
注意事項
MVPを実行している場合の注意点。BindingList
明らかに、ビューとプレゼンターに同じ参照が必要です。また、コンテンツをリセットする必要がある場合はlist.Clear()
、新しいものを作成するのではなく、電話することをお勧めします. プレゼンターで新しいものを作成すると、 との接続が切断され、ビューでプロパティUltraGrid
を再設定する必要があります。DataSource