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
DDDOriginal
2025-02-01 17:16:09562Durchsuche

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.

<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!

Stellungnahme:
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