2012-06-25 4 views
0

복사/붙여 넣기를 위해 DataGrid에서 상황에 맞는 메뉴를 사용하고 있습니다. 하지만 ContextMenu의 명령 매개 변수에서 현재보기를 얻지 못하고 있습니다. 다른 명령 바인딩에서 현재보기 상태를 얻기 위해 내 View 이름을 Command 매개 변수로 전달했습니다. 하지만 이제는 ContextMenu를 사용하여 내보기를 전달할 수 없으므로이 ContextMenu가 붙어 있습니다. MVVM을 사용하고 있습니다.ContextMenu에서 전체보기를 전달하는 방법은 무엇입니까?

내 조각이

<DataGrid.ContextMenu> 
    <ContextMenu x:Name="_menu"> 
      <MenuItem Header="Copy" Command="{Binding CopyCommand}" 
      CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}},Path=DataContext}" /> 
     </ContextMenu> 
</DataGrid.ContextMenu> 

답변

0

가장 좋은 방법은 선언하는 것입니다 (제 생각에) 당신의 ViewModel 페이지 내에서 정적 자원으로. 그런 다음 루트 패널의 DataContext을이 정적 리소스에 바인딩 할 수 있습니다 (현재 위치로 이동). 그런 다음 CommandParameter에서 바인딩 작업을 수행하는 추가 이점이 있습니다 (매개 변수를 FindAncestor 대신 StaticResource에 바인딩하여).

현재 바인딩 식의 밤은 가공이 히트 템플릿 캡슐화 경계,하지만 난

0
<DataGrid.ContextMenu> 
    <ContextMenu x:Name="_menu"> 
      <MenuItem Header="Copy" Command="{Binding CopyCommand}" 
      CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},Path=PlacementTarget.DataContext}" /> 
     </ContextMenu> 
</DataGrid.ContextMenu> 

내가 당신의 데이터 그리드가에 있다고 가정 모든 코드를 보지 않고 확인하지 못할 것입니다 왜 가장 가능성이 높은 이유는 당신의 현재보기

+0

답장을 보내 주셔서 감사합니다. 그러나 이것 역시 시도했지만 문제는 데이터 그리드가 (뷰) DataContext가 아닌 다른 ViewModel에 정의 된 값을 포함한다는 것입니다. DataGrid에서 행을 선택하고 마우스 오른쪽 버튼으로 클릭하고 복사합니다. 개체를 null로 설정하면 검색 할 수없는 views 개체에서 선택한 항목을 원합니다. – PhOeNiX

+0

쉬운 방법은 windowviewmodel을 datagridview viewmodel의 속성으로 노출하는 것입니다. 하지만 이렇게하면 커맨드 매개 변수를 제거 할 수 있습니다. 현재 뷰 모델에서 윈도우 탐색을해야하기 때문입니다. 그래서 commandparameter 제거하고 mef 또는 무엇을 통해 datagridviewmodel windowviewmodel 주입 할 것이라고 말할 것입니다. – blindmeis

관련 문제