[WPF] DataTemplate 안에서 ContextMenu의 바인딩
출처 : http://chanun.tistory.com/6
데이터 템플릿 안에있는 ContextMenu에, ViewModel에 있는 속성이나 커맨드 바인딩 방법중 하나 입니다.
1. ContextMenu를 갖게 되는 패널의 Tag속성에 ViewModel DataContext 바인딩
2. ContextMenu에 PlacementTarget.Tag 값을 DataContext로 지정한다.
3. MenuItem에 해당 Command 혹은 속성 바인딩
※ 동시에 DataTemplate의 DataContext나 그 속성을 사용해야 될경우 아래 CommandParameter 바인딩 처럼 구현하면 된다.
Xaml
<DataTemplate >
<Grid Tag="{Binding Path=DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<Grid.ContextMenu>
<ContextMenu DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" >
<MenuItem
Header="아이템1"
Command="{Binding Item1Command}"
CommandParameter="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"
/>
<MenuItem
Header="아이템2"
Command="{Binding Item2Command}"
CommandParameter="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"
/>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</DataTemplate>
※ ContextMenu.PlacementTarget
ContextMenu가 열리는 위치의 기준이 되는 UIElement를 가져오거나 설정합니다. 이 속성은 종속성 속성입니다.
위에서 전체말고 바로상위단 선택값 파라메타 값 넘김.
출처 : http://stackoverflow.com/questions/8154202/pass-command-parameter-from-the-xaml
...
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.SelectedItem}"