Search code examples
c#xamlwindows-phone-8listboxcontextmenu

How to hide context menu for particular list item in Windows Phone 8?


I am currently working on an app with Windows Phone 8. I have created a listbox in xaml and added a context menu for all items in that listbox. Now my requirement is to show and hide context menu based on some condition.

I have a delete_flag parameter, if value of delete_flag is 1 then i want to show context menu for that item else if it is 0 then hide the context_menu.

Can anyone suggest, is it possible to do that for Windows Phone 8 context menu control?

My Listbox xaml code is as below:

<ListBox x:Name="myListBox"
                 toolkit:TiltEffect.IsTiltEnabled="True"
                 HorizontalContentAlignment="Center"
                 ItemContainerStyle="{StaticResource GenericListBoxContainerStyle}"
                 SelectedItem="{Binding}"
                 SelectionChanged="myreportsListBox_SelectionChanged"
                 >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0,1,0,1"
                          Background="White">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Ellipse Grid.Column="0"
                                 Height="60" 
                                 Width="60"
                                 Margin="7">
                            <Ellipse.Fill>
                        <ImageBrush ImageSource="{Binding image, Converter={StaticResource Imageconverter}}"></ImageBrush>
                            </Ellipse.Fill>
                        </Ellipse>
                        <StackPanel Grid.Column="1"
                                    Margin="0,8,0,8">

                            <TextBlock Margin="2"
                                       Style="{StaticResource HeaderContentStyle}">
                                        <Run Text=""/>
                                        <Run Text="{Binding id}"/>
                                        <Run Text="-"/>
                                        <Run Text="{Binding name}"/>

                            </TextBlock>

                            <TextBlock Margin="2"
                                       Style="{StaticResource DescriptionContentStyle}">
                                       <Run Text=""/>
                                       <Run Text="{Binding date}"/>
                                       <Run Text="-"/>
                                       <Run Text="{Binding status}"/>

                            </TextBlock>
                        </StackPanel>
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu Name="servicerequestContextMenu"
                                                 IsZoomEnabled="False"
                                                 >


                                <toolkit:MenuItem Header="Delete"
                                                  Name="DeleteMenuBtn"
                                                  Click="DeleteMenuBtn_Click"
                                                  CommandParameter="{Binding}" />

                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Solution

  • The delete_flag should be true or false, and in my opinion, the best thing you can do, is to bind it to IsEnabled tag.

     <toolkit:MenuItem Header="Delete"
      IsEnabled="{Binding delete_flag}" 
      Name="DeleteMenuBtn"
      Click="DeleteMenuBtn_Click"
      CommandParameter="{Binding}" />
    

    edit after comments

    create new property in the item model

     public Visibility SetVisibility
        {
            get
            {
                return delete_flag == 1 ? Visibility.Visible:Visibility.Collapsed;
            }
    
        }
    ....
    <toolkit:MenuItem Header="Delete"
      Visibility="{Binding SetVisibility}" 
      Name="DeleteMenuBtn"
      Click="DeleteMenuBtn_Click"
      CommandParameter="{Binding}" />
    

    It's very simple but i think it should do the trick