Dev::DotNet/WPF

ListView Header Click 으로 정렬

isfry 2014. 1. 7. 19:20

ListView 를 사용할 때 Header 컬럼을 클릭해서 해당 컬럼을 기준으로 정렬하는 기능을 많이 사용한다.


해당 기능에 대해서는 MSDN 에 친절하게 예제가 나와있다.


MSDN : 머리글을 클릭할 때 GridView 열 정렬


하지만 해당 예시를 그대로 사용할 경우 약간의 문제가 발생한다.


    void GridViewColumnHeaderClickedHandler(object sender,  RoutedEventArgs e)
    {
        GridViewColumnHeader headerClicked =
              e.OriginalSource as GridViewColumnHeader;
        ListSortDirection direction;

        if (headerClicked != null)
        {
            if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
            {
                 ...

                string header = headerClicked.Column.Header as string;
                Sort(header, direction);

                ...
            }
        }
    }


Header Click 시 구현한 Event Handler 에서

 

Column 의 Header 문자열을 가져와서 Sort 메소드에 기준 컬럼으로 넘기는데

해당 예시는 Binding 한 Property Name 과 Header 가 일치할 때만 유효하다.


그렇기 때문에 해당 부분을 Binding 한 Property Name 을 가져오게 수정해야 한다.


    void GridViewColumnHeaderClickedHandler(object sender,  RoutedEventArgs e)
    {
        GridViewColumnHeader headerClicked =
              e.OriginalSource as GridViewColumnHeader;
        ListSortDirection direction;

        if (headerClicked != null)
        {
            if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
            {
                 ...

                string header = ((System.Windows.Data.Binding)headerClicked.Column.DisplayMemberBinding).Path.Path;
                Sort(header, direction);

                ...
            }
        }
    }