Ich habe die Elementquelle meines WPF-Datagrid auf eine Liste von Objekten festgelegt, die von meinem DAL zurückgegeben wurden. Ich habe auch eine zusätzliche Spalte hinzugefügt, die eine Schaltfläche enthält. Die xaml befindet sich unten.
<toolkit:DataGridTemplateColumn MinWidth="100" Header="View">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click">View Details</Button>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Dies macht gut. Gibt es bei der Button_Click- Methode eine Möglichkeit, die Zeile in dem Datagrid abzurufen, in dem sich die Schaltfläche befindet? Insbesondere ist eine der Eigenschaften meiner Objekte "Id", und ich möchte dies an den Konstruktor eines anderen Formulars im Ereignishandler übergeben können.
private void Button_Click(object sender, RoutedEventArgs e)
{
//I need to know which row this button is on so I can retrieve the "id"
}
Vielleicht brauche ich etwas extra in meinem xaml, oder vielleicht mache ich das auf Umwegen? Jede Hilfe / Beratung geschätzt.
Eine andere Möglichkeit, dies zu tun, besteht darin, die ID an die CommandParameter-Eigenschaft der Schaltfläche zu binden:
Dann können Sie wie im Code darauf zugreifen:
quelle
CommandParameter
möglicherweise nicht die beabsichtigte Verwendung der Eigenschaft, aber semantisch gesehen ist sie sinnvoller als die VerwendungTag
und einfacher als das Abrufen der ID vom gebundenen Objekt im Handler. Wenn Sie Befehle bevorzugen, ist dieser Ansatz in Ordnung, aber warum sollten Sie die Komplexität erhöhen, wenn Sie ihn nicht verwenden?Eine andere Möglichkeit, die an den Befehlsparameter DataContext gebunden ist und MVVM respektiert, wie Jobi Joy sagt, dass die Schaltfläche die Datenkontext-Formularzeile erbt.
Schaltfläche in XAML
Befehlsimplementierung
quelle
quelle
Wenn der DataContext Ihres DataGrid ein DataView-Objekt ist (die DefaultView-Eigenschaft einer DataTable), können Sie Folgendes tun:
quelle
e.OriginalSource
. statte.Source
.