Heim >Backend-Entwicklung >C++ >Warum aktualisiert mein DependentyProperty das übergeordnete ViewModel nicht?

Warum aktualisiert mein DependentyProperty das übergeordnete ViewModel nicht?

DDD
DDDOriginal
2025-02-01 17:21:09607Durchsuche

Why Doesn't My DependencyProperty Binding Update the Parent ViewModel?

Fehlerbehebung bei DeponcyProperty -Bindungen in einer Dateibrowser -Steuerung

Während des Erstellens einer benutzerdefinierten Dateibrowsersteuerung entsteht ein gemeinsames Problem, bei dem die Auswahl einer Datei die interne Textbox des Steuerelements aktualisiert, die Änderung in der Eigenschaft SelectedFile im übergeordneten Ansichtsmodell nicht verbreitet. Dies geschieht auch bei Verwendung einer DependencyProperty und Standardbindung.

Die Grundursache beruht häufig aus der Einstellung des DataContext des Usercontrols in seinem Konstruktor:

<code class="language-csharp">DataContext = this;</code>

Diese Selbstreferenzung DataContext überschreibt das ererbte DataContext vom übergeordneten und bricht die Bindung an das übergeordnete Ansichtsmodell.

Lösung: Verwendung RelativeSource Bindung

Die Lösung beinhaltet die Modifizierung der Bindung innerhalb des XAML des Usercontrol, um das übergeordnete Ansichtsmodell explizit abzielen. Verwenden Sie RelativeSource, um den visuellen Baum zu durchqueren:

<code class="language-xaml"><TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /></code>

Diese überarbeitete Bindung stellt sicher, dass die Eigenschaft SelectedFile im UserControl korrekt an die SelectedFile Eigenschaft des übergeordneten Ansichtsmodells bindet, selbst wenn das DataContext des Usercontrol intern gesetzt wird.

nun, wenn Sie die Usercontrol einbetten:

<code class="language-xaml"><FileBrowserControl SelectedFile="{Binding SelectedFile}" /></code>

Die Bindung funktioniert wie erwartet und aktualisiert die Eigenschaft des übergeordneten Ansichtsmodells bei der Dateiauswahl. SelectedFile

Das obige ist der detaillierte Inhalt vonWarum aktualisiert mein DependentyProperty das übergeordnete ViewModel nicht?. 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