Maison >développement back-end >C++ >Comment puis-je appeler les fonctions du modèle de vue principale à partir d'autres modèles de vue dans WPF ?
Appeler des fonctions dans le modèle de vue principal à partir d'autres modèles de vue
Dans ce scénario, vous disposez d'un programme avec un TreeView et des contentPresenters, chacun avec leurs propres modèles de vue. Le mainWindowViewModel contrôle l'affichage dans les contentPresenters et vous souhaitez le mettre à jour manuellement.
Accès à MainWindowViewModel à partir de TreeViewModel
L'extrait de code fourni tente d'obtenir le MainWindowViewModel à l'aide de DataContext , ce qui est incorrect car MainWindowVM n'est pas le TreeViewViewModel DataContext.
Objets délégués pour la communication parent-enfant
Une approche courante consiste à utiliser des objets délégués, qui permettent la communication dans les deux sens entre les modèles de vue parent et enfant. Les objets délégués peuvent être utilisés pour toute relation parent-enfant, pas seulement pour transmettre des paramètres entre des modèles de vue.
Appel de méthodes dans MainWindowViewModel
Pour appeler une méthode dans MainWindowViewModel à partir de TreeViewViewModel, remplacez le délégué dans la réponse liée par votre méthode. Par exemple :
public void ParameterViewModel_OnParameterChange(string parameter) { // Call MainWindowViewModel method here MainWindowVM.UpdateDisplay(); }
Alternativement, vous pouvez définir un délégué qui ne prend aucun paramètre :
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
Dans le modèle de vue parent, vous pouvez ensuite appeler la méthode dans l'enfant afficher le modèle lorsque le délégué est invoqué :
public void ChildViewModel_OnReadyForUpdate() { UpdateDisplay(); }
Liaison directe à la vue parent Modèle
Une autre approche plus simple consiste à lier directement les vues enfants aux modèles de vues parents. Cela vous permet de lier, par exemple, une propriété Button.Command dans une vue enfant à une propriété ICommand dans le modèle de vue parent :
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
Cela suppose que MainWindowViewModel est défini 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!