2010-12-20 6 views
0

나는 다음 상황에 맞는 메뉴가 있습니다Silverlight 컨텍스트 메뉴 : 클릭 한 메뉴를 확인하는 방법?

   <ListBox x:Name="sectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <toolkit:ContextMenuService.ContextMenu> 
            <toolkit:ContextMenu> 
             <toolkit:MenuItem Header="Hide this section from this list" Click="ContextMenuItem_Click" /> 
            </toolkit:ContextMenu> 
           </toolkit:ContextMenuService.ContextMenu> 
           <TextBlock Text="{Binding DisplayName}" /> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

당신이 볼 수 있듯이, 각 표시 항목이 자신의 상황에 맞는 메뉴를 가지고 있습니다. 각 상황에 맞는 메뉴는 동일한 이벤트 핸들러에 매여있다 :

이 방법에서
private void ContextMenuItem_Click(object sender, RoutedEventArgs e) 
    { 

    } 

, 어떻게하는 상황에 맞는 메뉴를 클릭 한 내가 말할 수 있습니까? 나는 DataTemplate에 해당하는 DataContext을 알고 싶다.

답변

4

당신은 DataContext에 액세스 얻을 수있는 FrameworkElement로 보낸 사람을 캐스팅하여 ListBoxItem의이 바인딩 된 항목을 얻을 수 있습니다 :

(sender as FrameworkElement).DataContext 

그런 다음 적절한 모델 클래스에이 캐스팅하고 세부 당신에 액세스 할 수 있습니다 필요한 것. 예 :

((sender as FrameworkElement).DataContext as ItemViewModel).DisplayName 
1

이벤트 처리기 ContextMenuItem_Click, 안에 중단 점을 넣으면 sendere의 속성을 검사 할 수 있습니다. 아마 거기에서 답을 찾을 것입니다.

이렇게하는 한 가지 방법은 해당 단어 위로 마우스를 이동하는 것입니다. 다른 하나는 직접 실행 창을 사용하는 것입니다. intellisense를 얻으려면 sender과 점을 입력하십시오.

1

<StackPanel Tag="{Binding}">을 사용하는 경우 ((FrameworkElement)sender).Tag은 DataContext 개체를 반환합니다 (물론 사용하기 전에 캐스팅해야 할 것입니다).

관련 문제