So führen Sie Funktionen im übergeordneten Ansichtsmodell aus untergeordneten Ansichtsmodellen aus
Ihre Anwendung besteht aus einer TreeView, zwei ContentPresentern und einer separaten Ansicht Modelle für jedes UI-Element, einschließlich des Hauptfensters. Um die Anzeige zu aktualisieren, versuchen Sie, eine Methode im MainWindowViewModel aus dem TreeViewViewModel aufzurufen.
Wie in ähnlichen Fällen besteht eine praktikable Lösung in der Verwendung von Delegate-Objekten. Eine ausführliche Erklärung und praktische Umsetzung finden Sie in der vorherigen Forumsantwort mit dem Titel „Übergabe von Parametern zwischen Ansichtsmodellen“. Ersetzen Sie einfach die Delegaten in diesem Beispiel durch die gewünschten Methoden, und sie funktionieren ähnlich.
Aktualisieren
Um Methoden direkt aufzurufen Anstatt Parameter zu übergeben, sollten Sie den folgenden modifizierten Delegaten-Handler in Betracht ziehen:
public void ParameterViewModel_OnParameterChange(string parameter) { // Call your method here }
Dieser Delegat dient als Pfad zum übergeordneten Ansichtsmodell und ermöglicht ereignisähnliche Funktionen Funktionalität („ReadyForYouToCallMethodNow“). Alternativ können Sie den Delegaten ohne Eingabeparameter definieren:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
Im übergeordneten Ansichtsmodell können Sie nach dem Anhängen des Handlers wie im vorherigen Beispiel dargestellt die Methode aufrufen:
public void ChildViewModel_OnReadyForUpdate() { // Call your method here UpdateDisplay(); }
Wenn mehrere untergeordnete Ansichtsmodelle beteiligt sind, können Sie den Delegaten in einer separaten Klasse definieren, auf die alle zugreifen können Modelle.
Update 2
Nach weiterer Analyse könnte ein einfacherer Ansatz ausreichen. Sie können untergeordnete Ansichtselemente direkt an Eigenschaften im übergeordneten Ansichtsmodell binden. Beispielsweise bindet der folgende Codeausschnitt in Ihrem TreeViewView die Button.Command-Eigenschaft an eine ICommand-Eigenschaft in MainWindowViewModel:
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
Dies setzt voraus, dass die Instanz des übergeordneten Ansichtsmodells als DataContext des MainWindow festgelegt ist.
Das obige ist der detaillierte Inhalt vonWie rufe ich übergeordnete Ansichtsmodellfunktionen von untergeordneten Ansichtsmodellen in WPF auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!