Aufrufen von Hauptansichtsmodellfunktionen aus anderen Ansichtsmodellen
Problem:
In einer Anwendung Mit einer Baumansicht und mehreren Inhaltspräsentatoren möchten Sie eine Funktion innerhalb des Hauptfensteransichtsmodells (MainWindowViewModel) aus der Baumansicht aufrufen Modell (TreeViewViewModel). Dies ist erforderlich, um die Anzeige manuell zu aktualisieren, da das MainWindowViewModel diese Änderungen steuert.
Lösung:
Die Verwendung von Delegatenobjekten ist eine praktikable Lösung für diese Eltern-Kind-Kommunikation. Delegate-Methoden können in verschiedenen Kontexten eingesetzt werden, einschließlich Child-Parent-Ansichtsmodellen, Code-Behind-Beziehungen und reinen Dateninteraktionen. Weitere Informationen zu Delegaten finden Sie in der Microsoft-Dokumentation „Delegates“ (C#-Programmierhandbuch).
Delegat-Implementierung:
Im TreeViewViewModel können Sie einen Delegaten implementieren, um einen bereitzustellen Pfad zurück zum übergeordneten Ansichtsmodell. Definieren Sie eine Delegate-Methode, die aufgerufen werden soll, wenn das untergeordnete Ansichtsmodell bereit ist:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
Das Hauptansichtsmodell (MainWindowViewModel) würde dann die UpdateDisplay-Methode abonnieren, wenn der Handler angehängt wird:
public void TreeViewViewModel_OnreadyForUpdate() { UpdateDisplay(); }
Datenbindungsansatz:
Alternativ können Sie einen einfacheren Ansatz in Betracht ziehen, der die direkte Datenbindung vom Kind aus beinhaltet Ansichten zum übergeordneten Ansichtsmodell. Binden Sie beispielsweise eine Schaltflächenbefehlseigenschaft:
<!-- In TreeViewView --> <Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
Dies setzt voraus, dass der DataContext des MainWindow auf eine Instanz des übergeordneten Ansichtsmodells festgelegt ist.
Das obige ist der detaillierte Inhalt vonWie kann ich Hauptansichtsmodellfunktionen von untergeordneten Ansichtsmodellen in einer WPF-Anwendung aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!