Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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);
    }
like image 209
Cort3vl Avatar asked Sep 28 '14 17:09

Cort3vl


1 Answers

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)
}
like image 120
Igor Ralic Avatar answered Oct 13 '22 21:10

Igor Ralic