Maison >développement back-end >C++ >Comment puis-je appeler des fonctions de modèle de vue principale à partir de modèles de vue enfants dans une application WPF ?

Comment puis-je appeler des fonctions de modèle de vue principale à partir de modèles de vue enfants dans une application WPF ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-29 18:26:10849parcourir

How Can I Invoke Main View Model Functions from Child View Models in a WPF Application?

Invocation des fonctions du modèle de vue principale à partir d'autres modèles de vue

Problème :

Dans une application avec une arborescence et plusieurs présentateurs de contenu, vous cherchez à invoquer une fonction dans le modèle de vue de la fenêtre principale (MainWindowViewModel) à partir de l'arborescence modèle de vue (TreeViewViewModel). Ceci est nécessaire pour mettre à jour manuellement l'affichage, car MainWindowViewModel contrôle ces modifications.

Solution :

L'utilisation d'objets délégués est une solution viable pour cette communication parent-enfant. Les méthodes déléguées peuvent être utilisées dans divers contextes, notamment les modèles de vue enfant-parent, les relations code-behind et les interactions de données pures. Pour plus d'informations sur les délégués, reportez-vous à la documentation des délégués de Microsoft (Guide de programmation C#).

Implémentation des délégués :

Dans le TreeViewViewModel, vous pouvez implémenter un délégué pour fournir un chemin de retour au modèle de vue parent. Définissez une méthode déléguée à appeler lorsque le modèle de vue enfant est prêt :

public delegate void ReadyForUpdate();
public ReadyForUpdate OnReadyForUpdate { get; set; }

Le modèle de vue principal (MainWindowViewModel) s'abonnerait alors à la méthode UpdateDisplay lors de l'attachement du gestionnaire :

public void TreeViewViewModel_OnreadyForUpdate()
{
    UpdateDisplay();
}

Approche de liaison de données :

Vous pouvez également envisager une approche plus simple impliquant une liaison directe de données provenant de l'enfant. vues au modèle de vue parent. Par exemple, liez une propriété de commande de bouton :

<!-- In TreeViewView -->
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand,
RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />

Cela suppose que le DataContext de MainWindow est défini sur une instance du modèle de vue parent.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn