Cort3vl
Cort3vl

Reputation: 163

How to correctly set up a 'ContextMenu' in a ListView for Windows Phone 8.1?

I have a Problem with the MenuFlyout. I'm trying to get a context menu, which works well, to give the user the options 'delete' and 'edit'. But if the user clicks on one of those options, there seems to be no solution on how to get the listview or the selected item. Maybe I'm just confused about something, but I searched the whole day and even though people had similiar problems, none of the solutions worked for me.

XAML:

    <Pivot x:Name="MyPivot" Title="MyTitle" ItemsSource="{Binding}">
        <Pivot.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Title}"/>
            </DataTemplate>
        </Pivot.HeaderTemplate>

        <Pivot.ItemTemplate>
            <DataTemplate>
                <ScrollViewer>
                    <ListView x:Name="MyListView" ItemsSource="{Binding Items}">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="ListViewItem">
                                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                                <Setter Property="Margin" Value="0,0,0,10"/>
                            </Style>
                        </ListView.ItemContainerStyle>

                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid Holding="Grid_Holding">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>

                                    <FlyoutBase.AttachedFlyout>
                                        <MenuFlyout>
                                            <MenuFlyoutItem x:Name="EditButton"
                                                            Text="Edit"
                                                            Click="EditButton_Click"/>
                                            <MenuFlyoutItem x:Name="DeleteButton"
                                                            Text="Delete"
                                                            Click="DeleteButton_Click"/>
                                        </MenuFlyout>
                                    </FlyoutBase.AttachedFlyout>

                                    // Content (TextBlocks...) 

                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </ScrollViewer>
            </DataTemplate>
        </Pivot.ItemTemplate>
    </Pivot>

C#

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

Upvotes: 7

Views: 2853

Answers (1)

Igor Ralic
Igor Ralic

Reputation: 15006

Once your click event is raised, you can get the DataContext of the FrameworkElement.

private void EditButton_Click(object sender, RoutedEventArgs e)
{
    var datacontext = (e.OriginalSource as FrameworkElement).DataContext;

    //this datacontext is probably some object of some type T (whatever is in your Items collections you haven't specified in your question)
}

Upvotes: 8

Related Questions