내 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>
이것은 잘 렌더링됩니다. 그러나 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에 추가로 뭔가가 필요할까요, 아니면 로터리 방식으로 진행할까요? 모든 도움 / 조언을 부탁드립니다.
답변
기본적으로 버튼은 행 데이터 개체의 데이터 컨텍스트를 상속합니다. 나는 그것을 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
}
답변
이 작업을 수행하는 또 다른 방법은 ID를 버튼의 CommandParameter 속성에 바인딩하는 것입니다.
<Button Click="Button_Click" CommandParameter="{Binding Path=ID}">View Details</Button>
그런 다음 코드에서 다음과 같이 액세스 할 수 있습니다.
private void Button_Click(object sender, RoutedEventArgs e)
{
object ID = ((Button)sender).CommandParameter;
}
답변
명령 매개 변수 DataContext에 바인딩하고 Jobi Joy와 같은 MVVM을 존중하는 또 다른 방법은 버튼이 데이터 컨텍스트 양식 행을 상속한다고 말합니다.
XAML의 버튼
<RadButton Content="..." Command="{Binding RowActionCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"/>
명령 구현
public void Execute(object parameter)
{
if (parameter is MyObject)
{
}
}
답변
MyObject obj= (MyObject)((Button)e.Source).DataContext;
답변
DataGrid의 DataContext가 DataView 개체 (DataTable의 DefaultView 속성) 인 경우 다음을 수행 할 수도 있습니다.
private void Button_Click(object sender, RoutedEventArgs e) {
DataRowView row = (DataRowView)((Button)e.Source).DataContext;
}