この例は、選択したファイルのパスをテキストボックスに表示し、ブラウジングファイルを許可するファイルブラウザコントロールを示しています。
<UserControl ... x:Class="Test.UserControls.FileBrowserControl"> <Grid ...> <TextBox Text="{Binding SelectedFile}" /> </Grid> </UserControl>
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 属性。 } }
<:>質問:
<FileBrowserControl Filter="XSLT File (*.xsl)|*.xsl|All Files (*.*)|*.*" SelectedFile="{Binding SelectedFile}" />
[参照]ボタンをクリックすると、ファイルブラウザーコントロールのテキストボックスが正しく更新されますが、親制御ビューモデルの選択されたファイルプロパティは設定されません。 <本>根本的な原因:
問題は、dataContextがそれ自体に設定されていることです。
viewmodelに縛られた継承とのこの矛盾は、ReativeSourceを使用したデータ結合属性の結合結合を破壊するためです。
<决>解決策: この問題を解決するために、UserControlのXAMLでの結合を変更する必要があります:this.DataContext = this;
これにより、選択されたファイルプロパティが、父親のコントロールのデータコンテキストを継承する親制御部品の選択されたファイル属性にバインドされることを保証できます。
を指定することにより、バインディングは、正しい属性を見つけるために、usercontrolの親レベルを見つけます。 上記の変更を通じて、親ビューモデルの
属性が正しく更新されます。以上がusercontrolで依存関係を使用しているときに、親のviewmodelの「selectedfile」プロパティアップデートが更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。