WinFormsアプリのコントロールをデータバインディングを使用してネストされたオブジェクトにバインドする方法の簡単で具体的な説明が見つからないようです。例えば:
class MyObject : INotifyPropertyChanged
{
private string _Name;
public string Name
{
get { return _Name; }
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
private MyInner _Inner;
public MyInner Inner
{
get { return _Inner; }
set
{
_Inner = value;
OnPropertyChanged("Inner");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
class MyInner : INotifyPropertyChanged
{
private string _SomeValue;
public string SomeValue
{
get { return _SomeValue; }
set
{
_SomeValue = value;
OnPropertyChanged("SomeValue");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
ここで、2つのテキストボックスを持つフォームを想像してください。1つ目はName用、2つ目はInner.SomeValue用です。Nameに対してバインディングを機能させることは簡単にできますが、Inner.SomeValueは不安定です。オブジェクトにデータを入力してからバインディングを設定すると、テキストボックスにInner.SomeValueが表示されますが、編集できません。Innerを初期化せずに新しいオブジェクトから開始すると、Inner.SomeValueにデータを固定できないようです。
私はMSDN全体、StackOverflow全体、およびさまざまなキーワードを使用した数十の検索をチェックしました。誰もがデータベースまたはDataGridへのバインドについて話したいと思っており、ほとんどの例はXAMLで記述されています。
更新:私はマークの完全なテストハーネスを試しましたが、部分的に成功しました。「すべての変化」を打ったら!ボタンをクリックすると、内側のオブジェクトに書き戻すことができるようです。ただし、MyObject.Inner nullから開始すると、内部オブジェクトを作成する方法がわかりません。今のところ、内部参照が常に有効なオブジェクトに設定されていることを確認するだけで、この問題を回避できると思います。それでも、何かが足りないような気がして仕方がありません:)