I\'ve set the itemsource of my WPF Datagrid to a List of Objects returned from my DAL. I\'ve also added an extra column which contains a button, the xaml is below.
MyObject obj= (MyObject)((Button)e.Source).DataContext;
Another way which binds to command parameter DataContext and respect MVVM like Jobi Joy says button inherits datacontext form row.
Button in XAML
<RadButton Content="..." Command="{Binding RowActionCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"/>
Command implementation
public void Execute(object parameter)
{
if (parameter is MyObject)
{
}
}
Basically your button will inherit the datacontext of a row data object. I am calling it as MyObject and hope MyObject.ID is what you wanted.
private void Button_Click(object sender, RoutedEventArgs e)
{
MyObject obj = ((FrameworkElement)sender).DataContext as MyObject;
//Do whatever you wanted to do with MyObject.ID
}
Another way I like to do this is to bind the ID to the CommandParameter property of the button:
<Button Click="Button_Click" CommandParameter="{Binding Path=ID}">View Details</Button>
Then you can access it like so in code:
private void Button_Click(object sender, RoutedEventArgs e)
{
object ID = ((Button)sender).CommandParameter;
}
If your DataGrid's DataContext is a DataView object (the DefaultView property of a DataTable), then you can also do this:
private void Button_Click(object sender, RoutedEventArgs e) {
DataRowView row = (DataRowView)((Button)e.Source).DataContext;
}