XAML データ バインディングは、UI 要素とデータ ソース間のシームレスな同期を提供します。ただし、特に依存関係プロパティの場合に問題が発生する可能性があります。この記事では、XAML の依存関係プロパティに関連する一般的なデータ バインディングの問題について説明します。
よくあるシナリオには、コードビハインドを介して親ウィンドウのデータ ソースにバインドされた依存関係プロパティを持つユーザー コントロールが含まれます。 データ ソースが変更されると、ユーザー コントロールのプロパティ値の更新に失敗します。
依存関係プロパティは、要素階層内でのデータ共有を容易にします。 これらは DependencyProperty.Register
を使用して定義され、プロパティ名、タイプ、所有者のタイプ、メタデータが必要です。
依存関係プロパティを正しく宣言することが重要です。 DependencyProperty.Register
メソッドは 4 つのパラメータを受け入れます:
nameof(propertyName)
を使用します。typeof(string)
)。typeof(MyControl)
)。次の修正されたコードは、適切な依存関係プロパティ宣言を示しています。
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
ユーザー コントロール内の依存関係プロパティにバインドするには、RelativeSource
プロパティを使用してソース オブジェクトを特定する必要があります。これにより、バインディングがユーザー コントロールの階層内の正しいデータ コンテキストをターゲットにすることが保証されます。
以下の XAML の例は、正しい RelativeSource
設定を示しています。
<code class="language-xml"><mycontrol test="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></mycontrol></code>
コンストラクター内でユーザー コントロールの DataContext
を設定しないでください。 これにより、親のデータ コンテキストの継承が防止されます。
これらのベスト プラクティスに従うことで、依存関係プロパティを使用した XAML データ バインディングが正しく機能します。 依存関係プロパティを正確に宣言し、ユーザー コントロールで RelativeSource
バインディングを使用し、ユーザー コントロール コンストラクターで DataContext
を明示的に設定しないようにしてください。
以上がデータ バインディングで XAML 依存関係プロパティが更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。