Ustawiłem itemsource mojego WPF Datagrid na listę obiektów zwróconych z mojego DAL. Dodałem również dodatkową kolumnę, która zawiera przycisk, Xaml znajduje się poniżej.
<toolkit:DataGridTemplateColumn MinWidth="100" Header="View">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click">View Details</Button>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
To sprawia, że dobrze. Jednak w metodzie Button_Click jest jakiś sposób, aby uzyskać wiersz w datagrid, w którym znajduje się przycisk? Mówiąc dokładniej, jedną z właściwości moich obiektów jest „Id” i chciałbym móc przekazać ją do konstruktora innej formy w programie obsługi zdarzeń.
private void Button_Click(object sender, RoutedEventArgs e)
{
//I need to know which row this button is on so I can retrieve the "id"
}
Może potrzebuję czegoś dodatkowego w moim xaml, a może zajmuję się tym okrężną drogą? Każda pomoc / rada mile widziana.
Innym sposobem, w jaki lubię to zrobić, jest powiązanie ID z właściwością CommandParameter przycisku:
Następnie możesz uzyskać do niego dostęp w ten sposób w kodzie:
źródło
CommandParameter
może nie być zamierzonym przeznaczeniem właściwości, ale semantycznie jest bardziej znaczące niż używanieTag
i prostsze niż pobieranie identyfikatora z powiązanego obiektu w procedurze obsługi. Jeśli wolisz polecenia, to podejście jest w porządku, ale po co dodawać złożoność, jeśli nie zamierzasz go używać?Inny sposób, który wiąże się z parametrem polecenia DataContext i szanuje MVVM, jak Jobi Joy mówi, że przycisk dziedziczy wiersz formularza kontekstu danych.
Przycisk w XAML
Wdrażanie poleceń
źródło
źródło
Jeśli DataContext Twojego DataGrid jest obiektem DataView (właściwość DefaultView elementu DataTable), możesz również zrobić to:
źródło
e.OriginalSource
. zamiaste.Source
.