1

次のプロパティとメソッドを持つクラスPersonがあるとします。

  • public string FirstName
  • public string LastName
  • public House CurrentHouse
  • public void BuildHouse(string streetAddress)

Houseは、番地などのいくつかの単純なプロパティを持つ別のクラスです。

最初にオブジェクトを作成するときにPerson、WPFウィンドウをオブジェクトにデータバインドします。人はaFirstNameLastNameで始まりますが、それらCurrentHouseはnullです。(これはばかげた例ですが、議論のために、人が住む前に家を建てなければならないとしましょう。)データバインディングは期待どおりFirstNameLastName機能します。

この人を家に移したいとしましょう。ロジックは次のようになります。

public void BuildHouse(string streetAddress)
{
    this.CurrentHouse = new House()
    {
        StreetAddress = streetAddress;
    };
}

WPFウィンドウのデータコンテキストは、この人物オブジェクトです。その人の住所を示すラベルがあります(のでバインドされMyPerson.CurrentHouse.StreetAddressていUpdateSourceTriggerますPropertyChanged)。最初に画面を表示したとき、CurrentHouseオブジェクトはnullであり、ラベルは空白です(予期される動作)。ただし、を呼び出すとBuildHouse("123 anywhere st")、データバインドされたラベルの値が「123anywherest」に変更されると思います。

これは起こっていることではなく、ウィンドウが最初に開いているとき、データバインドされたオブジェクトのCurrentHouseプロパティPersonがnullであるためだと私は考え始めています。私の疑惑は正しいですか?その場合、CurrentHouseオブジェクトがnullでなくなったら、ラベルでデータバインディングを有効にするために何をする必要がありますか?

4

1 に答える 1

1

これは起こっていることではなく、ウィンドウが最初に開いているときに、データバインドされたPersonオブジェクトのCurrentHouseプロパティがnullであるためだと思い始めています。私の疑惑は正しいですか?その場合、CurrentHouseオブジェクトがnullでなくなったら、ラベルでデータバインディングを有効にするために何をする必要がありますか?

これは可能ですが、クラスPersonHouseクラスがを実装する必要がある可能性が高くなりますINotifyPropertyChanged

このインターフェイスを(正しく)実装することで、WPFは、オブジェクトのプロパティが変更されたこと(新しいHouse設定、家の中の住所の変更など)を知ることができます。

于 2013-01-14T19:33:01.570 に答える