ホームページ >バックエンド開発 >C++ >依存関係のバインディングバインディングが親ビューモデルを更新しないのはなぜですか?

依存関係のバインディングバインディングが親ビューモデルを更新しないのはなぜですか?

DDD
DDDオリジナル
2025-02-01 17:21:09580ブラウズ

Why Doesn't My DependencyProperty Binding Update the Parent ViewModel?

ファイルブラウザーコントロールの依存関係バインディングのトラブルシューティング

カスタムファイルブラウザー制御を構築するときに、ファイルを選択すると、コントロールの内部テキストボックスが更新されますが、親ビューモデルのSelectedFileプロパティへの変更を伝播できない場合に一般的な問題が発生します。 これは、DependencyPropertyおよび標準的なバインディングを使用している場合でも発生します。

根本原因は、しばしば、そのコンストラクター内のusercontrolの

を設定することに起因します。 DataContext この自己参照は、親から継承された

を無効にし、親ビューモデルへのバインディングを破壊します。
<code class="language-csharp">DataContext = this;</code>

解決策:DataContextバインディングDataContext

を利用します

ソリューションには、UserControlのXAML内のバインディングを変更して、親ビューモデルを明示的にターゲットにします。 を使用して、視覚ツリーを通過します:RelativeSource この改訂されたバインディングにより、usercontrolの

プロパティが、usercontrolの

が内部的に設定されている場合でも、親ビューモデルのRelativeSourceプロパティに正しく結合することが保証されます。

さて、usercontrolを埋め込むとき:
<code class="language-xaml"><TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /></code>

SelectedFileバインディングは予想どおりに機能し、ファイルの選択時に親ビューモデルのSelectedFileプロパティを更新します。

以上が依存関係のバインディングバインディングが親ビューモデルを更新しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。