Comment voulez-vous lier une commande pour un MenuItem (WPF)?
Voici mon code à partir de la Vue.xaml.cs:
private RelayCommand _closeCommand;
public ICommand CloseCommand
{
get
{
if (_closeCommand == null)
{
_closeCommand = new RelayCommand(param => this.OnClose());
}
return _closeCommand;
}
}
public void OnClose()
{
Close();
}
Et voici le code de mon point de Vue.xaml:
<Window.ContextMenu>
<ContextMenu>
<MenuItem Name="menuItem_Close" Header="Close" Command="{Binding CloseCommand}" />
</ContextMenu>
</Window.ContextMenu>
Quand je lance le programme et sélectionnez la fermeture de l'élément de menu, rien ne se passe. Le CloseCommand code n'est pas encore exécutée.
Avez-vous mis le DataContext?
J'ai trouvé la solution à mon problème. J'ai été en utilisant un ViewModel qui avait une propriété qui a été un autre ViewModel type et j'ai besoin d'étendue à ce propery en faisant ceci:
J'ai trouvé une solution à votre question [stackoverflow.com/questions/898852/... [1]: stackoverflow.com/questions/898852/...
J'ai trouvé la solution à mon problème. J'ai été en utilisant un ViewModel qui avait une propriété qui a été un autre ViewModel type et j'ai besoin d'étendue à ce propery en faisant ceci:
Command="{Binding ActiveVM.CloseCommand}"
J'ai trouvé une solution à votre question [stackoverflow.com/questions/898852/... [1]: stackoverflow.com/questions/898852/...
OriginalL'auteur Jackson Dean Goodwin | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
ContextMenu
ne fait pas partie de la VisualTree, c'est pourquoi laDataContext
va pas être héritée. IciContextMenu.PlacementTarget
est une sorte de relais pour obtenir leWindow
:DataContext
? Dans mon test, il semble hériter de la DataContext que vous attendez ...J'ai essayé votre code de la Commande="..." mais il ne fonctionne pas comme avant rien happed.
Selon ceci Popup crée son propre visualtree. Cela signifie pas de DataContext héritage pour ContextMenu qui est placé dans une fenêtre Popup.
Toute erreur de liaison? Êtes-vous sûr que le DataContext est défini par la Fenêtre? Peut-être essayer un Bouton de votre liaison de Commande dans la Fenêtre directement pour cela.
Merci pour cette. Comment dois-je lier un
static ICommand
à un MenuItem pas à l'aide d'un ViewModel de liaison? Je suis en train d'utiliser (ce qui n'est pas de travail)Command="{x:Static ...}"
mais cela ne semble pas fonctionner avec la solution que vous avez fournies ici. S'il vous plaît aider.OriginalL'auteur LPL
Vieille question, nouvelle réponse. Pour moi le problème était que
GalaSoft.MvvmLight.Command.RelayCommand
ne prend pas en charge les fermetures pour l'action. RelayCommand stocke une référence faible à l'action de sorte que la fermeture obtient libéré presque immédiatement. L'action doit être un modèle de méthode ou de maintien d'une autre manière.OriginalL'auteur SnakE
pour la liaison de la croix-arborescence visuelle, reportez-vous à
La liaison de la Visibilité pour DataGridColumn dans WPF
ou simplement essayez de rechercher BindingProxy
OriginalL'auteur user2024396