Я установил itemsource моего WPF Datagrid в список объектов, возвращаемых из моего DAL. Я также добавил дополнительный столбец, содержащий кнопку, xaml находится ниже.
<toolkit:DataGridTemplateColumn MinWidth="100" Header="View">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click">View Details</Button>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Это нормально. Однако в методе Button_Click есть ли способ получить строку в сетке данных, где находится кнопка? В частности, одним из свойств моих объектов является «Id», и я хотел бы иметь возможность передать его в конструктор другой формы в обработчике событий.
private void Button_Click(object sender, RoutedEventArgs e)
{
//I need to know which row this button is on so I can retrieve the "id"
}
Возможно, мне нужно что-то дополнительное в моем xaml, или, может быть, я собираюсь об этом окольным путем? Любая помощь / совет приветствуются.
Еще один способ сделать это - привязать идентификатор к свойству CommandParameter кнопки:
Затем вы можете получить к нему доступ, например, в коде:
источник
CommandParameter
может не являться предполагаемым использованием свойства, но семантически оно более значимо, чем использование,Tag
и проще, чем получение идентификатора из связанного объекта в обработчике. Если вы предпочитаете команды, этот подход подходит, но зачем добавлять сложность, если вы не собираетесь его использовать?Другой способ, который привязывается к параметру команды DataContext и уважает MVVM, например, Jobi Joy, говорит, что кнопка наследует строку формы datacontext.
Кнопка в XAML
Реализация команды
источник
источник
Если DataContext вашего DataGrid является объектом DataView (свойство DefaultView DataTable), вы также можете сделать это:
источник
e.OriginalSource
. вместоe.Source
.