Comment exécuter des fonctions dans le modèle de vue parent à partir de modèles de vue enfants
Votre application se compose d'un TreeView, de deux contentPresenters et d'une vue séparée modèles pour chaque élément de l’interface utilisateur, y compris la fenêtre principale. Pour mettre à jour l'affichage, vous cherchez à invoquer une méthode dans le MainWindowViewModel à partir du TreeViewViewModel.
Comme des cas similaires, une solution viable implique l'utilisation d'objets délégués. Consultez la réponse précédente du forum intitulée « Passage de paramètres entre les modèles de vue » pour une explication détaillée et une mise en œuvre pratique. Remplacez simplement les délégués dans cet exemple par les méthodes souhaitées, et ils fonctionneront de la même manière.
Mettre à jour
Pour appeler directement les méthodes au lieu de transmettre des paramètres, considérez le gestionnaire de délégué modifié ci-dessous :
public void ParameterViewModel_OnParameterChange(string parameter) { // Call your method here }
Ce délégué sert de chemin vers le modèle de vue parent, permettant fonctionnalité de type événement (« ReadyForYouToCallMethodNow »). Alternativement, vous pouvez définir le délégué sans aucun paramètre d'entrée :
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
Dans le modèle de vue parent, après avoir attaché le gestionnaire comme illustré dans l'exemple précédent, vous pouvez appeler la méthode :
public void ChildViewModel_OnReadyForUpdate() { // Call your method here UpdateDisplay(); }
Si plusieurs modèles de vues enfants sont impliqués, vous pouvez définir le délégué dans une classe distincte accessible à tous modèles.
Mise à jour 2
Après une analyse plus approfondie, une approche plus simple peut suffire. Vous pouvez directement lier des éléments de vue enfant aux propriétés du modèle de vue parent. Par exemple, l'extrait de code suivant dans votre TreeViewView lie la propriété Button.Command à une propriété ICommand dans MainWindowViewModel :
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
Cela suppose que l'instance du modèle de vue parent est définie comme DataContext de MainWindow.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!