J'ai un ContextMenu dont les éléments sont tous liés à des commandes et d'activer/désactiver correctement après que toute commande est invoquée à partir d'une autre source, mais avant, ils sont tous désactivés. Donc, si je lance l'application, tous les MenuItems sont désactivés mais si j'appelle l'une des commandes liées d'une autre source (boutons, par exemple), ils sont synchronisés avec le code CanExecute. Je n'ai aucune idée de comment déboguer cela. Toute pensée serait utile!?!WPF: L'élément ContextMenu lié à une commande est activé uniquement après l'appel de la commande à partir d'une autre source. Pourquoi est-ce que c'est?
Répondre
Parfois, vous devez forcer WPF à réévaluer si les commandes sont activées ou non.
Quelque part dans votre code, ajoutez un appel à:
CommandManager.InvalidateRequerySuggested();
voir si cela aide.
Merci Adel, [CommandBinding ne fonctionne pas?] Je vous remercie de prendre le temps. J'ai essayé différents endroits sans joie. – Brad
Semble être un bogue où il n'y a pas d'élément focalisé dans la portée de focus principale de la fenêtre. Une solution de contournement consiste à lier CommandTarget de MenuItem à la fenêtre principale.
Réponse de Marco Zhou ici: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7bd75a7c-eab4-4f3a-967b-94a9534a7455
<Window.ContextMenu>
<ContextMenu >
<ContextMenu.Items>
<MenuItem Command="ApplicationCommands.Open"
CommandTarget="{Binding Path=PlacementTarget,RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"/>
</ContextMenu.Items>
</ContextMenu>
</Window.ContextMenu>
Cela fonctionne très bien. Mais l'éditeur XAML affiche une fausse "Référence d'objet non définie sur une instance d'un objet". Cela fonctionne bien une fois compilé et exécuté, mais ce serait bien de ne pas avoir l'erreur affichée dans l'éditeur. Un moyen de résoudre ce problème? –
double possible de (http://stackoverflow.com/questions/6070478/commandbinding-not-working) –