J'ai défini la source d'éléments de mon WPF Datagrid sur une liste d'objets renvoyés par mon DAL. J'ai également ajouté une colonne supplémentaire qui contient un bouton, le xaml est ci-dessous.
<toolkit:DataGridTemplateColumn MinWidth="100" Header="View">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click">View Details</Button>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Cela rend bien. Cependant, sur la méthode Button_Click , y a-t-il un moyen d'obtenir la ligne sur la grille de données où réside le bouton? Plus précisément, l'une des propriétés de mes objets est "Id", et j'aimerais pouvoir la transmettre au constructeur d'une autre forme dans le gestionnaire d'événements.
private void Button_Click(object sender, RoutedEventArgs e)
{
//I need to know which row this button is on so I can retrieve the "id"
}
Peut-être ai-je besoin de quelque chose de plus dans mon xaml, ou peut-être que je vais faire ça de manière détournée? Toute aide / conseil apprécié.
Une autre façon de procéder consiste à lier l'ID à la propriété CommandParameter du bouton:
Ensuite, vous pouvez y accéder comme ceci dans le code:
la source
CommandParameter
n'est peut-être pas l'utilisation prévue de la propriété, mais sémantiquement, elle est plus significative que l'utilisationTag
et plus simple que de récupérer l'ID de l'objet lié dans le gestionnaire. Si vous préférez les commandes, cette approche est bonne, mais pourquoi ajouter de la complexité si vous n'allez pas l'utiliser?Une autre manière qui se lie au paramètre de commande DataContext et respecte MVVM comme Jobi Joy dit que le bouton hérite de la ligne du formulaire datacontext.
Bouton en XAML
Implémentation de la commande
la source
la source
Si le DataContext de votre DataGrid est un objet DataView (la propriété DefaultView d'un DataTable), vous pouvez également le faire:
la source
e.OriginalSource
. au lieu dee.Source
.