Heim >Backend-Entwicklung >C++ >Warum ist das 'SelectedFile' -Fotentum von My Parent Models nicht, wenn sie eine Abhängigkeitspflicht in einer UserControl verwenden?
Dieses Beispiel zeigt eine Dateibrowsersteuerung, mit der der Pfad der ausgewählten Datei in einem Textfeld angezeigt wird und die Browserdateien ermöglicht.
<code class="language-xml"><UserControl ... x:Class="Test.UserControls.FileBrowserControl"> <Grid ...> <TextBox Text="{Binding SelectedFile}" /> </Grid> </UserControl></code>Die Verwendung von Kontrollen ist wie folgt:
<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>
<:> Frage:
<code class="language-xml"><FileBrowserControl Filter="XSLT File (*.xsl)|*.xsl|All Files (*.*)|*.*" SelectedFile="{Binding SelectedFile}" /></code>
Wenn Sie auf die Schaltfläche "Durchsuchen" klicken, wird das Textfeld in der Dateibrowsersteuerung korrekt aktualisiert, die Eigenschaft aus SelectedFile des übergeordneten Steuerelements ViewModel wird jedoch nicht festgelegt.
Die Grundursache:
Das Problem besteht Dieser Konflikt mit der an das ViewModel gebundenen Vererbung, da er alle Datenbindungsattribute bindende Bindung unter Verwendung von VerwandtenSource zerstört.
Lösung:
<code class="language-csharp">this.DataContext = this;</code>
Um dieses Problem zu lösen
Dies kann sicherstellen, dass die Eigenschaft SelectedFile im SelectedFile -Attribut im übergeordneten Steuerteil gebunden ist, das den Rechenzontext der Kontrolle seines Vaters erbt. Durch Angeben von wird die Bindung die übergeordnete Nutzendrol -Ebene ermittelt, um das korrekte Attribut zu finden.
Durch die obige Änderung werden die
-attribute des übergeordneten ViewModel korrekt aktualisiert.<code class="language-xml"><TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType=UserControl}}" /></code>
Das obige ist der detaillierte Inhalt vonWarum ist das 'SelectedFile' -Fotentum von My Parent Models nicht, wenn sie eine Abhängigkeitspflicht in einer UserControl verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!