Obtenir le menu contextuel de la grille de données WPF Cliquez sur la ligne
J'ai un WPF DataGrid
<DataGrid AutoGenerateColumns="False" Name="dataGrid1" IsReadOnly="True" >
<DataGrid.Columns>
<DataGridTextColumn Header="Site" Binding="{Binding Site}" Width="150" />
<DataGridTextColumn Header="Subject" Binding="{Binding Subject}" Width="310" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="Context_Delete">
<MenuItem.Icon>
<Image Width="12" Height="12" Source="Images/Delete.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
J'ai le gestionnaire d'événements click:
private void Context_Delete(object sender, System.EventArgs e) { }
Comment puis-je obtenir la ligne sur lequel le Menu Contextuel a été avant le clic? Le sender
objet est System.Windows.Controls.MenuItem
pas la DataGridRow
. Comment puis-je obtenir le DataGridRow
où le Menu Contextuel a été cliqué. (J'ai mis le DataGrid.ItemSource
dans le fichier code-behind.)
source d'informationauteur O.O.
Vous devez vous connecter pour publier un commentaire.
Sur la base de votre code d'exemple, je suppose que vous lier votre grille de données à une ObservableCollection des objets qui vous lier les propriétés du Site et l'Objet de la fonction des colonnes datagridcolumn.
Essentiellement, tout ce que vous devez faire est de trouver ce que l'élément lié à l'cliqué DataGridRow est et de le supprimer à partir de votre ObservableCollection. Voici un exemple de code pour vous aider à démarrer:
Généralement, vous n'avez pas à traiter avec des lignes (si vous n' - réfléchir à nouveau sur les raisons) - à la place, vous travaillez avec le modèle de vue. Lorsque vous ouvrez le menu contextuel, vous recevez votre article sélectionné, de sorte qu'il peut être consulté via la grille de données.Propriété SelectedItem. Toutefois, si vous avez vraiment besoin DataGridRow - vous avez votre grille de données.SelectedIndex et il y a beaucoup de réponses ici sur DONC sur la façon d'obtenir la ligne. comme Obtenir ligne dans la grille de données
Pour développer morincer du point ci-dessus avec un exemple, j'ai fini avec une approche plus simple...
Dans mon cas, le
est l'ObservableCollection les lignes sont liés. Donc, par de meilleures pratiques, j'simple suppression de l'élément sélectionné à partir de la collecte et de la liaison prend en charge l'INTERFACE utilisateur.
dsfgsho réponse a fonctionné pour moi, mais un clic droit sur une ligne de la grille de ne sélectionne pas automatiquement. Cela signifie que si votre cible est ailleurs et vous cliquez à droite et sélectionnez un élément de menu contextuel, vous pouvez obtenir une gamme d'exception sur le point.SelectedCells[0], ou si vous avez une ligne sélectionnée et cliquez à droite sur une ligne différente, vous pouvez obtenir des résultats inattendus.
J'ai traité de cette manipulation "PreviewMouseRightButtonDown" sur la grille de données. Je suis ici explicitement la sélection d'une ligne lorsqu'il est cliqué avec le bouton droit. J'ai oublier d'où mon UIHelpers classe venu (probablement ailleurs sur ce site, je l'utilise pour résoudre le drag & drop items), mais cela devrait vous diriger dans la bonne direction si vous exécutez ce problème. C'est une extension de la accepté de répondre:
Élémentaire Pete UIHelper provient sans doute:
http://www.hardcodet.net/2009/03/moving-data-grid-rows-using-drag-and-drop
Cet Article répertorie un Zip qui contient UIHelper.cs.
Ce n'est pas mon Code, donc pas de copier/coller ici.