2015-03-08 4 views
2

У меня есть выпадающей прикрепленную к ListView пункта, упрощена следующим образом:MenuFlyoutItem Получить Родитель

<ListView.ItemTemplate> 
    <DataTemplate> 
     <StackPanel IsHoldingEnabled="True" Holding="ListView_Holding" > 
      <FlyoutBase.AttachedFlyout> 
       <MenuFlyout> 
        <MenuFlyoutItem Text="remove" Click="MenuFlyoutItem_Click" /> 
       </MenuFlyout> 
      </FlyoutBase.AttachedFlyout> 
     </StackPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 

private void ListView_Holding(object sender, HoldingRoutedEventArgs e) 
{ 
    FrameworkElement senderElement = sender as FrameworkElement; 
    FlyoutBase flyoutBase = FlyoutBase.GetAttachedFlyout(senderElement); 

    flyoutBase.ShowAt(senderElement); 
} 

private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e) 
{ 

} 

Как получить элемент ListView изнутри MenuFlyoutItem_Click, что MenuFlyout является «прилагается» к? Я пробовал несколько вещей, но не смог заставить его работать.

При необходимости я могу отправить больше кода.

ответ

1

Вы можете получить точный элемент, получив DataContext. Это будет объект из коллекции, к которой вы привязываетесь.

var datacontext = senderElement.DataContext; 

Затем вы можете получить ListViewItem из этого DataContext.

ListViewItem item = this.NameOfYourList.ContainerFromItem(datacontext) as ListViewItem; 
+0

Спасибо за ответ, полезный материал, который я не знал. Поскольку я хочу выполнить код, чтобы удалить элемент из ListView, когда пользователь нажимает «удалить» на выпадающем меню, а не на длительное нажатие самого элемента, как мне это сделать изнутри «MenuFlyoutItem_Click» ? – blawford

+0

@blawford Datacontext - это сам элемент (не ListViewItem, а точный контекстный элемент). Если вы привязываете ListView.ItemsSource к ObservableCollection, просто удаление этого datacontext из ListView должно немедленно отразиться в ListView! –

Смежные вопросы