본문 바로가기

Dev::DotNet/WPF

ListView Header Click 으로 정렬

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);

                ...
            }
        }
    }


'Dev::DotNet > WPF' 카테고리의 다른 글

Hardcodet.NotifyIcon.Wpf 의 MessageBox?  (0) 2014.10.07
단순 Event Behavior  (0) 2014.09.23
DPI 비율 구하기  (0) 2013.12.26
xaml 에서 enum binding 하기  (0) 2013.12.16
WPF TextBox Caret 의 좌표 가져오기  (0) 2013.12.09