Comment appeler des fonctions dans un modèle de vue à partir d'autres modèles de vue?
Mon programme est composé d'un TreeView
et deux contentPresenters
au niveau du sol. Le mainWindow, TreeView
, et chaque contentPresenter
ont tous leurs propres viewmodel.
Je voudrais appeler une fonction dans la mainWindowViewModel
de la TreeViewViewModel
.
J'ai besoin de le faire parce que la mainWindowViewModel
contrôles de ce qui est affiché dans la contentPresenters
, et je voudrais mettre à jour manuellement l'affichage.
Je devine que je voudrais faire quelque chose comme ça...
TreeViewViewModel
:
public class TreeViewViewModel
{
//Do I need to declare the MainWindowVM?
public TreeViewViewModel() { ... }
private void function()
{
//Command that affects display
//Manually call function in MainWindowVM to refresh View
}
}
J'ai essayé d'accéder à la MainWindowVM
de la TreeViewViewModel
en utilisant:
public MainWindowViewModel ViewModel { get { return DataContext as MainWindowViewModel; } }
Mais il ne fait pas beaucoup de sens. parce que le MWVM n'est pas le DataContext
de la TreeViewViewModel
.
OriginalL'auteur Eric after dark | 2013-10-22
Vous devez vous connecter pour publier un commentaire.
J'ai simplement répondu à une question similaire à cela plus tôt aujourd'hui. Si vous jetez un oeil à la Passage de paramètres entre les viewmodels post, vous verrez que la réponse consiste à l'aide de
delegate
objets. Vous pouvez simplement remplacer cesdelegate
s (à partir de la réponse) avec votre méthode(s) et il fonctionnera de la même manière.S'il vous plaît laissez-moi savoir si vous avez des questions.
Mise à JOUR >>>
Oui, désolé, j'ai complètement oublié de vous le voulais pour l'appel de méthodes à la place... j'ai travaillé sur beaucoup trop de messages ce soir. Donc, toujours à l'aide de l'exemple de l'autre post, il suffit d'appeler votre méthode dans le
ParameterViewModel_OnParameterChange
gestionnaire:Pense de la
delegate
comme étant votre chemin de retour à la vue parent modèle... c'est comme élever un événement appeléReadyForYouToCallMethodNow.
En fait, vous n'avez même pas besoin d'un paramètre d'entrée. Vous pouvez définir votredelegate
comme ceci:Puis dans la vue parent modèle (après avoir branché le gestionnaire comme dans l'exemple précédent):
Que vous avez plusieurs enfants de vue des modèles, vous pouvez définir la
delegate
dans une autre classe qu'ils ont tous deux accès. Laissez-moi savoir si vous avez plus de questions.Mise à JOUR 2 >>>
Après la lecture de votre dernier commentaire encore une fois, j'ai juste pensé à une méthode beaucoup plus simple que pourrait réaliser ce que vous voulez... au moins, si je vous comprends bien. Il est possible pour vous de
Bind
directement à partir de votre enfant vues de votre parent modèle de vue. Par exemple, cela vous permettra deBind
unButton.Command
dans la propriété d'un enfant en vue d'uneICommand
propriété dans votre vue parent modèle:Dans
TreeViewView
:Cela suppose bien sûr qu'une instance de la vue parent modèle en question est défini comme le
DataContext
de laMainWindow
.En utilisant l'exemple de l'autre post, vous avez un
ParameterViewModel_OnParameterChange
méthode de gestionnaire dans votreMainWindowViewModel
classe. La seule différence est que votre mise à jour dans ce gestionnaire est déjà là où vous le souhaitez (dans la vue parent modèle), de sorte que vous n'avez pas besoin de passer queparameter
à l'autre enfant modèle de vue... effectivement vous pouvez utiliser le même exemple, mais il suffit de faire ce que vous voulez avec la valeur de laParameterViewModel_OnParameterChange
gestionnaire au lieu de le passer à l'autre modèle de vue.Cela semble être sur la transmission de valeurs à d'autres Viewmodel, et la modification des valeurs de paramètre. Je veux juste appeler une fonction dans
mainWindowViewModel
à partir d'unCommand
/Fonction dans un autre ViewModel. La fonction de MWVM que je vais appeler à ne modifie que ce qui est présenté dans lecontentPresenter
basée sur les éléments sélectionnés.Génial! Grande réponse merci!
OriginalL'auteur Sheridan
La façon la plus simple est de passer d'une méthode comme
Action
le constructeur de l'enfant modèle de vue.OriginalL'auteur walteronassis