ホームページ >バックエンド開発 >C++ >usercontrolで依存関係を使用しているときに、親のviewmodelの「selectedfile」プロパティアップデートが更新されないのはなぜですか?

usercontrolで依存関係を使用しているときに、親のviewmodelの「selectedfile」プロパティアップデートが更新されないのはなぜですか?

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

Why Doesn't My Parent ViewModel's `SelectedFile` Property Update When Using a DependencyProperty in a UserControl?

依存関係の結合問題と解決策

この例は、選択したファイルのパスをテキストボックスに表示し、ブラウジングファイルを許可するファイルブラウザコントロールを示しています。

<code class="language-xml"><UserControl ... x:Class="Test.UserControls.FileBrowserControl">
    <Grid ...>
        <TextBox Text="{Binding SelectedFile}" />
    </Grid>
</UserControl></code>
コントロールの使用は次のとおりです
<code class="language-csharp">public class FileBrowserControl : UserControl
{
    public ICommand BrowseCommand { get; set; }
    public static DependencyProperty SelectedFileProperty = DependencyProperty.Register("SelectedFile", ...);
    public string SelectedFile { get => (string)GetValue(SelectedFileProperty); set => SetValue(SelectedFileProperty, value); }
    public string Filter { get; set; }

    public FileBrowserControl()
    {
        ...
        this.DataContext = this; // 将 DataContext 设置为 FileBrowserControl 实例。
    }

    private void Browse()
    {
        ...
        SelectedFile = dialog.FileName; // 更新 FileBrowserControl 实例的 SelectedFile 属性。
    }
}</code>

質問:

<code class="language-xml"><FileBrowserControl Filter="XSLT File (*.xsl)|*.xsl|All Files (*.*)|*.*" SelectedFile="{Binding SelectedFile}" /></code>

[参照]ボタンをクリックすると、ファイルブラウザーコントロールのテキストボックスが正しく更新されますが、親制御ビューモデルの選択されたファイルプロパティは設定されません。 根本的な原因:

問題は、dataContextがそれ自体に設定されていることです。

viewmodelに縛られた継承とのこの矛盾は、ReativeSourceを使用したデータ結合属性の結合結合を破壊するためです。

解決策:

この問題を解決するために、UserControlのXAMLでの結合を変更する必要があります:
<code class="language-csharp">this.DataContext = this;</code>

これにより、選択されたファイルプロパティが、父親のコントロールのデータコンテキストを継承する親制御部品の選択されたファイル属性にバインドされることを保証できます。

を指​​定することにより、バインディングは、正しい

属性を見つけるために、usercontrolの親レベルを見つけます。 上記の変更を通じて、親ビューモデルの

属性が正しく更新されます。

以上がusercontrolで依存関係を使用しているときに、親のviewmodelの「selectedfile」プロパティアップデートが更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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