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:
DataContext = this;
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:
<TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
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:
<FileBrowserControl SelectedFile="{Binding SelectedFile}" />
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!