4

次のように簡略化された ListView アイテムにフライアウトが添付されています。

<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_ClickMenuFlyout が「接続」されている中から ListView 項目を取得するにはどうすればよいですか? 私はいくつかのことを試しましたが、それを機能させることができませんでした。

必要に応じて、さらにコードを投稿できます。

4

1 に答える 1

2

DataContext を取得することで、正確な項目を取得できます。これは、バインド先のコレクションのオブジェクトになります。

var datacontext = senderElement.DataContext;

次に、その DataContext から ListViewItem を取得できます。

ListViewItem item = this.NameOfYourList.ContainerFromItem(datacontext) as ListViewItem;
于 2015-03-08T14:40:36.480 に答える