2013-04-12 44 views
0

ListBox的ItemSource是ObservableCollection的動物。 每隻動物都有一個名字和一個ID。在顯示動物名稱的TextBlock內部,我有一個ContextMenu。長時間點擊時,會顯示UnFollow菜單。點擊該菜單時,會引發UnFollow_OnClick事件。ContextMenu,獲取父文本塊Id

現在我的問題,我怎麼能在我的代碼後面得到動物的Id?

已經嘗試了一些不同的場景,但找不到任何工作解決方案。

<ListBox x:Name="AllAnimals" Margin="0,0,-12,0" ItemsSource="{Binding AllAnimals}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
        <StackPanel Margin="0,0,0,17"> 
         <TextBlock Text="{Binding Name}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}"> 
          <toolkit:ContextMenuService.ContextMenu> 
           <toolkit:ContextMenu IsZoomEnabled="False"> 
            <toolkit:MenuItem Header="Unfollow" Click="UnFollow_OnClick" /> 
           </toolkit:ContextMenu> 
          </toolkit:ContextMenuService.ContextMenu> 
         </TextBlock> 
        </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

private void UnFollow_OnClick(object sender, RoutedEventArgs e) 
{ 

} 

回答

2

這應該工作:

private void UnFollow_OnClick(object sender, RoutedEventArgs e) 
    { 
     Animal animal = ((Animal)((sender as FrameworkElement).DataContext)); 

     MenuItem item = (sender as MenuItem); 
     string itemValue = item.Header.ToString(); 

     if (itemValue == "Unfollow") 
     { 
      try 
      { 
       if (animal != null) 
       { 
        // animal.Id 
       } 
      } 
      catch (Exception) 
      { 
      } 
     } 
    } 
+0

完美的作品。謝謝!非常感謝 – superfrallan

+0

不客氣。 –

0

試試這個:

private void UnFollow_OnClick(object sender, RoutedEventArgs e) 
    { 
     var animal = AllAnimals.SelectedItem as Animal; 
     if(animal==null) return; 
     var id = animal.Id; 
    } 

希望它的幫助。

+0

使用這種方法,它的工作原理有時,但大多是動物的對象爲null。任何想法爲什麼? – superfrallan

+0

將事件處理程序添加到事件ContextMenuIsOpened中,發件人將成爲您的列表框項目。然後手動將此項目設置爲列表框的選定項目。就這樣。 – jimpanzer