2009-07-20 2 views
3

MVVM 패턴을 사용하여 WPF 응용 프로그램을 작성하려고합니다. 내가 autofiltering 기능이 부족 WPF 데이터 표 (툴킷에서)를 사용하고 있습니다. 그래서 그것을 구현하고 싶습니다. 나는 열 머리글 서식 파일에 상황에 맞는 메뉴를 추가했습니다. 실제로 Filtering 메서드를 호출해야하는 "Filter"라는 MenuItem이 있습니다.WPF MVVM : 어떤 헤더 컨텍스트 메뉴에서 클릭했는지 확인

그래서 ViewModel로가는 적절한 DelegateCommand로 MenuItem의 명령을 설정했습니다. 문제는 마우스 오른쪽 버튼으로 클릭 한 실제 열에 대한 정보를 전달해야한다는 것입니다. MVVM을 사용하지 않는다면 "보낸 사람"인수 (MenuItem)를받는 이벤트 핸들러를 구현 한 다음 부모 (ContextMenu)를 찾고 해당 부모가 나에게 열을 줄 것입니다. 그러나 어떻게하면 같은 결과를 얻을 수 있습니까? 보낸 사람을 내 명령에 어떻게 전달할 수 있습니까? ComandParameter를 사용하여이 작업을 수행 할 수 있습니까?

정말 간단한 작업을 수행하기 위해 복잡한 패턴을 사용하고 싶지 않습니다. 결국 MVVM은 개발을 간소화해야합니다 ...

답변

1

Column 매개 변수 값을 명령 매개 변수로 전달하여 ViewModel에서 열 세부 정보를 가져올 수 있습니까?

+0

어떻게하면됩니까?

+1

그냥 DataContext 바인딩은 트릭을 할 것입니다

0

상대 소스를 시도해 볼 수도 있지만 HeaderViewModelItem과 같이 각 헤더에 바인딩하는 다른 ViewModel을 가질 수 있다면 더 쉽습니다. 거기에서부터 당신의 HeaderViewModelItem에 DelegateCommand를 해고하고, 당신의 큰 viewmodel을 해고 할 것입니다.

저는이 모델을 꽤 성공적으로 사용했습니다. 약간의 데이터 바인딩 춤을 둘러 봅니다.

0

명령 매개 변수에 무엇인가를 전달하려면 컨텍스트 메뉴가 자체 시각적 트리에 있음을 유의해야합니다. 다행히 여전히 부모로부터의 DataContext를 상속, 그래서 뭔가 당신에게 GridViewColumnHeader, 또는 그것의 시각적 트리에서 적어도 무언가를 얻어야한다

<MenuItem CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=DataContext}" /> 

있다.

+0

기본 바인딩은 항상 DataContext, 입니다 는 DataContext가 MenuItem에도 상속되기 때문에 충분합니다. –

+0

이것은 MenuItem이 어떻게 생성되는지에 달려 있습니다. Binding을 통해 생성 된 경우 부모와 동일한 DataContext를 가지지 않습니다. –

관련 문제