Rek*_*moc 94 c# wpf xaml datagrid datagridview
我已经将我的WPF Datagrid的itemsource设置为从我的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>
Run Code Online (Sandbox Code Playgroud)
这很好.但是在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"
}
Run Code Online (Sandbox Code Playgroud)
也许我在我的xaml中需要额外的东西,或者我可能会以迂回的方式进行此操作?任何帮助/建议表示赞赏.
Job*_*Joy 122
基本上,您的按钮将继承行数据对象的datacontext.我将其称为MyObject,并希望MyObject.ID是您想要的.
private void Button_Click(object sender, RoutedEventArgs e)
{
MyObject obj = ((FrameworkElement)sender).DataContext as MyObject;
//Do whatever you wanted to do with MyObject.ID
}
Run Code Online (Sandbox Code Playgroud)
xr2*_*0xr 44
我喜欢这样做的另一种方法是将ID绑定到按钮的CommandParameter属性:
<Button Click="Button_Click" CommandParameter="{Binding Path=ID}">View Details</Button>
Run Code Online (Sandbox Code Playgroud)
然后您可以在代码中访问它:
private void Button_Click(object sender, RoutedEventArgs e)
{
object ID = ((Button)sender).CommandParameter;
}
Run Code Online (Sandbox Code Playgroud)
小智 10
绑定到命令参数DataContext并尊重MVVM的另一种方式,如Jobi Joy,说按钮继承了datacontext表单行.
XAML中的按钮
<RadButton Content="..." Command="{Binding RowActionCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"/>
Run Code Online (Sandbox Code Playgroud)
命令实现
public void Execute(object parameter)
{
if (parameter is MyObject)
{
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
MyObject obj= (MyObject)((Button)e.Source).DataContext;
Run Code Online (Sandbox Code Playgroud)