web-dev-qa-db-ja.com

セッターは依存関係プロパティで実行されませんか?

いくつかの疑問を明確にするための短い質問です。要素が依存関係プロパティにバインドされている場合、セッターは実行されませんか?

public string TextContent
{
    get { return (string)GetValue(TextContentProperty); }
    set { SetValue(TextContentProperty, value); Debug.WriteLine("Setting value of TextContent: " + value); }
}

public static readonly DependencyProperty TextContentProperty =
    DependencyProperty.Register("TextContent", typeof(string), typeof(MarkdownEditor), new UIPropertyMetadata(""));

.。

<TextBox Text="{Binding TextContent}" />

私のセッターで以下に気づいたように実行されません

Debug.WriteLine("Setting value of TextContent: " + value);
39
Jiew Meng

WPFバインディングエンジンは、GetValueSetValueを直接呼び出します(プロパティセッターとゲッターをバイパスします)。 XAMLマークアップでサポートできるように(そして正しくコンパイルできるように)、プロパティが存在する必要があります。

53
Dean Chalk

DependencyPropertyを作成するには、タイプDepdencyPropertyの静的フィールドをタイプに追加し、DependencyProperty.Register()を呼び出して依存関係プロパティのインスタンスを作成します。 DependendyPropertyの名前は、常に... Propertyで終わる必要があります。これは、WPFの命名規則です。

通常の.NETプロパティとしてアクセスできるようにするには、プロパティラッパーを追加する必要があります。このラッパーは、DependencyObjectから継承されたGetValue()メソッドとSetValue()メソッドを使用し、DependencyPropertyをキーとして渡すことによって、値を内部的に取得および設定する以外に何もしません。

これらのプロパティはコードからプロパティを設定したときにのみ呼び出されるため、これらのプロパティにロジックを追加しないでください。 XAMLからプロパティを設定すると、SetValue()メソッドが直接呼び出されます。

各DependencyPropertyは、変更通知、値の強制、および検証のためのコールバックを提供します。これらのコールバックは、依存関係プロパティに登録されます。

ソース: http://www.wpftutorial.net/DependencyProperties.html

45
Kishore Kumar