2009-07-23 3 views
2

(WPF Toolkit의) WPF DataGrid에 대한 필터링 기능을 개발하려고합니다. 사용자가 임의의 셀을 마우스 오른쪽 단추로 클릭하고 CcontextMenu에서 Filter을 선택한 다음 그리드를 셀 값으로 필터링해야합니다.WPF DataGrid : 필터링을위한 열 바인딩 속성 가져 오기

M-V-VM 패턴을 시도 중입니다. 내 창 datacontext MainWindowViewModelTransactions 속성이 있습니다. 이 속성은 ObservableCollection<TransactionViewModel>을 반환하고 데이터 표는이 컬렉션을 항목 소스로 사용합니다. 따라서 기본적으로 각 행은 TransactionViewModel으로 제한됩니다 (추측 할 수 있듯이이 표에는 거래가 나열되어 있음). MainWindowsViewModel은 현재 선택된 행을 필터링하고 추적하는 데 사용되는 ICollectionView입니다. DataGrid의 속성은 IsSynchronizedWithCurrentItem이며 "true"로 설정되어 있으므로 myCollectionView.CurrentItem은 현재 선택된 TransactionViewModel을 제공합니다.

내가 알아야 할 유일한 것은 필터링해야하는 열입니다. 이것은 사용자가 컨텍스트 메뉴를 클릭 한 위치에 따라 다릅니다. 따라서 컨텍스트 메뉴 항목 CommandProperty을 사용하여이 정보를 전달하려고합니다. 그리고 여기에 나는 진짜 문제가 있습니다. 나는 노력이 :

CommandParameter="{Binding Column.Binding.Path.Path, 
             RelativeSource={RelativeSource FindAncestor, 
                 AncestorType={x:Type tk:DataGridCell}}}" /> 

이 정말 추한이지만,이 DataGridTextColumn의 작동합니다. 불행하게도, 나는 DataGridTemplateColumn을 가지고 있는데, 그들은 작동하지 않습니다. (실제 셀 템플릿에 도달해야하기 때문에 경로가 다릅니다.) ...

어떻게이 기능을 구현할 수 있습니까? 아마도 모든 방법이 잘못되었을 것입니까? 나는 그 어떤 가치있는 예도 찾지 못했습니다. 내가 발견 한 유일한 것은 WPF DataGrid 어떤 이유로 든 전혀 작동하지 않는 Codeproject의 자동 필터 구현입니다.

감사합니다. 당신이 당신의 MainWindowViewModel에서 양방향 모드로 바인딩 할 수 있도록 CurrentCell을이 도움이 될하지만 ...

데이터 그리드가있는 경우

답변

0

나는 100 % 확실하지 않다. 그런 다음 모든 "행"은 MainWindowViewModel에 정의 된 DoFilter 명령을 가리킬 수 있습니다. 그것은 뷰티 솔루션이 아니기 때문에 (뷰 모델은 DataGrid 셀 유형을 알아야하기 때문에) 작동해야합니다.

CommandParameter= 
    "{Binding RelativeSource={RelativeSource FindAncestor,tk:DataGridCell,1}}" /> 

및 명령의 실행 된 이벤트가 실제 열 이름을 찾는 모든 어려운 부분을 처리하자

0

왜 그냥 이런 매개 변수로 셀을 통과? 그렇게하면 필요한 모든 특수 케이스 코드를 작성할 수 있습니다.

관련 문제