Eu defini a fonte de itens do meu Datagrid WPF para uma Lista de Objetos retornados do meu DAL. Também adicionei uma coluna extra que contém um botão, o xaml está abaixo.
<toolkit:DataGridTemplateColumn MinWidth="100" Header="View">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click">View Details</Button>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Isso funciona bem. No entanto, no método Button_Click , há alguma maneira de obter a linha no datagrid onde o botão reside? Mais especificamente, uma das propriedades dos meus objetos é "Id" e gostaria de poder passar isso para o construtor de outro formulário no manipulador de eventos.
private void Button_Click(object sender, RoutedEventArgs e)
{
//I need to know which row this button is on so I can retrieve the "id"
}
Talvez eu precise de algo extra no meu xaml ou talvez esteja fazendo isso de uma forma indireta? Qualquer ajuda / conselho apreciada.
Outra maneira que gosto de fazer é vincular o ID à propriedade CommandParameter do botão:
Então você pode acessá-lo assim no código:
fonte
CommandParameter
pode não ser o uso pretendido da propriedade, mas semanticamente é mais significativo do que usarTag
e mais simples do que recuperar o ID do objeto vinculado no manipulador. Se você prefere comandos, essa abordagem é adequada, mas por que adicionar complexidade se você não vai usá-la?Outra forma que se liga ao parâmetro de comando DataContext e respeita o MVVM, como Jobi Joy diz que o botão herda a linha do formulário do datacontext.
Botão em XAML
Implementação de comando
fonte
fonte
Se o DataContext do seu DataGrid for um objeto DataView (a propriedade DefaultView de uma DataTable), você também pode fazer isso:
fonte
e.OriginalSource
. em vez dee.Source
.