c# search - WPF DataGrid-열의 버튼으로 Click 이벤트 핸들러의 행을 가져옵니다.




table sample (5)

내 WPF Datagrid의 itemsource를 내 DAL에서 반환 된 Objects 목록으로 설정했습니다. 단추가 포함 된 추가 열도 추가했습니다. 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 메서드에 단추가있는 DataGrid 행을 얻을 수있는 방법이 있습니까? 보다 구체적으로, 내 개체의 속성 중 하나는 "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에서 뭔가가 필요하거나 어쩌면 나는 이것에 대해 로터리 방식으로 갈 것인가? 도움이나 조언을 부탁드립니다.


Answers

이 작업을 수행하는 또 다른 방법은 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를 상속합니다. 나는 그것을 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
}

DataGrid의 DataContext가 DataView 객체 (DataTable의 DefaultView 속성)이면 다음과 같이 할 수도 있습니다.

private void Button_Click(object sender, RoutedEventArgs e) {
   DataRowView row = (DataRowView)((Button)e.Source).DataContext;
}

작업 매개 변수 DataContext에 바인딩하고 Jobi Joy와 같은 MVVM을 존중하는 또 다른 방법은 datacontext 양식 행을 상속받습니다.

XAML의 버튼

<RadButton Content="..." Command="{Binding RowActionCommand}" 
                         CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"/>

명령 구현

public void Execute(object parameter)
    {
        if (parameter is MyObject)
        {

        }
    }

Customer 유형 객체에 Customer 유형 객체를 UserProfile 하려고합니다. 기본적으로이 프레임 워크는 이러한 객체를 캐스팅하는 방법을 알지 못하기 때문에 작동하지 않습니다. 이 방법으로 절대적으로해야한다면 유일한 옵션은 명시 적 캐스트 연산자를 제공하는 것입니다.

public static explicit operator Digit(byte b)  // explicit byte to digit conversion operator
{
    Digit d = new Digit(b);  // explicit conversion

    System.Console.WriteLine("Conversion occurred.");
    return d;
}

자세한 내용은 here 참조 here .





c# wpf xaml datagrid datagridview