2013-04-12 4 views
0

ItemSource для ListBox - наблюдаемый набор животных. Каждое животное имеет имя и идентификатор. Внутри TextBlock, показывающего имя животного, у меня есть ContextMenu. При длительном нажатии отображает меню UnFollow. При нажатии на это меню он вызывает событие UnFollow_OnClick.ContextMenu, get Parent TextBlock 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

Используя этот подход, он работает иногда, но в основном объект животного является недействительным. Любые идеи почему? – superfrallan

+0

добавить обработчик события в событие ContextMenuIsOpened, и отправитель будет вашим элементом списка. Затем вручную установите этот элемент в качестве выбранного элемента списка. И это все. – jimpanzer