菜单项获取父级

4

我有一个附加在ListView项目上的Flyout,简化如下:

<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)
{

}

我该如何在 MenuFlyoutItem_Click 中获取与菜单关联的 ListView 项?我尝试了几种方法,但都没有成功。如果需要,我可以发布更多代码。
1个回答

2

通过获取DataContext,您可以获得精确的项目。这将是您绑定到的集合中的对象。

var datacontext = senderElement.DataContext;

然后您可以从该DataContext获取ListViewItem。
ListViewItem item = this.NameOfYourList.ContainerFromItem(datacontext) as ListViewItem;

谢谢回复,有一些我不知道的有用的东西。由于我想在用户单击Flyout上的“删除”而不是长按项目本身时执行代码以从ListView中删除项目,那么我该如何在MenuFlyoutItem_Click中实现呢? - blawford
1
@blawford 数据上下文是项本身(不是ListViewItem,而是确切的上下文项)。如果您将ListView.ItemsSource绑定到ObservableCollection,则仅从ListView中删除此数据上下文应立即反映在ListView中! - Igor Ralic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接