いくつかの疑問を明確にするための短い質問です。要素が依存関係プロパティにバインドされている場合、セッターは実行されませんか?
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);
WPFバインディングエンジンは、GetValue
とSetValue
を直接呼び出します(プロパティセッターとゲッターをバイパスします)。 XAMLマークアップでサポートできるように(そして正しくコンパイルできるように)、プロパティが存在する必要があります。
DependencyPropertyを作成するには、タイプDepdencyPropertyの静的フィールドをタイプに追加し、DependencyProperty.Register()を呼び出して依存関係プロパティのインスタンスを作成します。 DependendyPropertyの名前は、常に... Propertyで終わる必要があります。これは、WPFの命名規則です。
通常の.NETプロパティとしてアクセスできるようにするには、プロパティラッパーを追加する必要があります。このラッパーは、DependencyObjectから継承されたGetValue()メソッドとSetValue()メソッドを使用し、DependencyPropertyをキーとして渡すことによって、値を内部的に取得および設定する以外に何もしません。
これらのプロパティはコードからプロパティを設定したときにのみ呼び出されるため、これらのプロパティにロジックを追加しないでください。 XAMLからプロパティを設定すると、SetValue()メソッドが直接呼び出されます。
各DependencyPropertyは、変更通知、値の強制、および検証のためのコールバックを提供します。これらのコールバックは、依存関係プロパティに登録されます。