Commande passer le paramètre dans le xaml
J'essaie de faire quelque chose comme ceci:
<DataGrid Name="myGrid" ItemSource="{Binding Path=MyCollection}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem
Command="{Binding RemoveRow}"
CommandParameter="{Binding ElementName=myGrid, Path=SelectedItem}">
</ContextMenu>
</DataGridContextMenu>
</DataGrid>
mais je me suis null toujours (j'ai essayé aussi SelectedIndex et SelectedValue)
si je passe le paramètre suivant à l'exécution de code, cela fonctionne:
<MenuItem Command="{Binding RemoveRow}" CommandParameter="1">
- Avez-vous vérifier que SelectedItem n'est pas nulle?
- Je ne sais pas si cela fonctionne pour vous, mais vous pouvez simplement vérifier la grille de propriété SelectedItem.
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela dans votre CommandParameter,
Je l'ai déjà testé et cela devrait fonctionner.
Cela ne fonctionne pas car le
ContextMenu
ne fait pas partie du visuel ou de la logique de l'arbre de laDataGrid
, de sorte qu'il n'a pas hérité de laDataContext
.Autant que je sache, il n'y a savoir de solution facile à ce problème en utilisant uniquement de l'intégré dans le système de liaison. Cependant, à l'aide d'un simple "proxy" de la classe, comme l'explique ici, vous pouvez contourner ce problème:
Toutefois vous avez encore un problème:
ElementName=myGrid
ne fonctionne pas (encore une fois, parce queContextMenu
n'est pas dans le visuel ou la logique de l'arbre de laDataGrid
, de sorte qu'il n'est pas dans le même nom de champ). Une solution simple consiste à lier leSelectedItem
de laDataGrid
à une propriété du ViewModel, et d'utiliser cette propriété à la place du paramètre de commande: