1

重複の可能性:
INotifyPropertyChanged を実装せずにバインディングが更新されるのはなぜですか?

私はWPFを持っています:

    <TextBlock Grid.Row="0" Text="{Binding SomeProperty}" />
    <TextBox Grid.Row="1" Text="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged}" />

にバインド

クラス MyModel1
{
    string _someProperty = string.Empty;
    パブリック文字列 SomeProperty
    {
        get { return _someProperty; }
        セット { _someProperty = 値; }
    }
}

それはすべてで動作します:

    クラス MyModel
        {
            パブリック文字列 SomeProperty { get; 設定; }
        }

ご覧のとおり、プロパティの変更通知はありませんが、TextBox に入力しているときに TextBlock が更新されます。Visual C# Express 2010、標準 WPF アプリ プロジェクト テンプレート、標準コントロール、スニペットなし、追加なし、.NET 4 クライアント プロファイルを使用しています。

  • 質問 1: なぜ機能するのですか?
  • 質問 2: それは .NET 4 の新機能ですか?
  • 質問 3: モデルにイベントを実装せずに、コードからプロパティの変更に関する通知を受け取るにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

1 それが機能する場合、WPF のデータ バインディング エンジンはPropertyDescriptor、ソース オブジェクトがプレーンな CLR オブジェクトで INotifyPropertyChanged インターフェイスを実装していない場合、ソース プロパティをラップするインスタンスにデータ バインドします。

PropertyDescriptor.AddValueChanged()メソッドは、通知を購読することを許可します。

変更は必要に応じて同期されませんINotifyPropertyChanged。この側面をカスタマイズするために使用します。

2 あなたはこの記事を読むことができます

リンク: http://msdn.microsoft.com/en-us/library/bb613588.aspx

于 2012-09-08T12:38:48.590 に答える