Heim > Backend-Entwicklung > C++ > Warum ist das 'SelectedFile' -Fotentum von My Parent Models nicht, wenn sie eine Abhängigkeitspflicht in einer UserControl verwenden?

Warum ist das 'SelectedFile' -Fotentum von My Parent Models nicht, wenn sie eine Abhängigkeitspflicht in einer UserControl verwenden?

DDD
Freigeben: 2025-02-01 17:16:09
Original
576 Leute haben es durchsucht

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

Abhängigkeitsproperty -Bindungsproblem und Lösung

Dieses Beispiel zeigt eine Dateibrowsersteuerung, mit der der Pfad der ausgewählten Datei in einem Textfeld angezeigt wird und die Browserdateien ermöglicht.

<UserControl ... x:Class="Test.UserControls.FileBrowserControl">
    <Grid ...>
        <TextBox Text="{Binding SelectedFile}" />
    </Grid>
</UserControl>
Nach dem Login kopieren
Die Verwendung von Kontrollen ist wie folgt:
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 属性。
    }
}
Nach dem Login kopieren

<:> Frage:
<FileBrowserControl Filter="XSLT File (*.xsl)|*.xsl|All Files (*.*)|*.*" SelectedFile="{Binding SelectedFile}" />
Nach dem Login kopieren

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:

this.DataContext = this;
Nach dem Login kopieren

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.
<TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType=UserControl}}" />
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage