none
contexmenu, listbox,... RRS feed

  • Pregunta


  • Buenos días,

    Estoy aprendiendo poco a poco, por lo que puede que mis dudas sean simples. Mi problema es que estoy diseñando un App donde hay un listado. Y quiero que al mantener pulsado el listado se despliegue el contextmenu para poder elegir entre pin to Start y eliminar.

    mi código para el xaml es el siguiente:

    <ListBox Name="lista" VerticalAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionChanged="Visionar" Height="535" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid Margin="5">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="75"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition/>
                                </Grid.RowDefinitions>
                                <Image Width="75" Source="{Binding Logo}" Stretch="UniformToFill" Grid.RowSpan="1"/>
                                <TextBlock x:Name="titulo" Grid.Column="1" Text="{Binding Titulo}" Grid.Row="1" Style="{StaticResource JumpListStringStyle}"/>
                                <toolkit:ContextMenuService.ContextMenu>
                                    <toolkit:ContextMenu IsZoomEnabled="True">
                                        <toolkit:MenuItem Header="Anclar a Inicio" Click="anclar"/>
                                        <toolkit:MenuItem Header="Eliminar" Click="BorrarBBDD"/>
                                    </toolkit:ContextMenu>
                                </toolkit:ContextMenuService.ContextMenu>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

    El llenar el contenido del listbox lo hago de la siguiente manera:

     foreach (XElement value in xml.Elements("canal"))
                        {
                            contenedor item = new contenedor();
                            item.Titulo = value.Element("titulo").Value;
                            item.Logo = value.Element("logo").Value;
                            item.Url = value.Element("url").Value;
                            lista.Items.Add(item);
                            contador++;
                        }

    Los eventos del listbox que controlo es al variar la selección con el siguiente código:

    ListBox list = sender as ListBox; if (list != null && list.SelectedItem != null) { contendedor= list.SelectedItem as contenedor; list.SelectedItem = null; NavigationService.Navigate(new Uri("/lector.xaml?url="+a.Url+"&nombre="+a.Titulo+"&logo="+a.Logo, UriKind.Relative)); }

    En el evento clic del menuitem del contextmenu, ¿como obtengo la información del objeto almacenado en ítem del listbox?

    Muchas gracias por vuestra ayuda


    • Editado cansado293 martes, 4 de febrero de 2014 10:09
    miércoles, 29 de enero de 2014 19:07

Respuestas

  • Yo lo que hago es lo siguiente, por ejemplo para un eliminar es utilizar en XAML para el MenuItem el CommandParameter, le hago un binding con el identificador del objeto que quiero borrar.

    <toolkit:MenuItem  Header="{Binding Path=LocalizedResources.Edit, Source={StaticResource LocalizedStrings}}"  CommandParameter="{Binding ProductID}"  Click="editContext_Click"/>

    Y luego en el evento click hago por ejemplo:

     private void Edit_Click(object sender, RoutedEventArgs e)
            {
                MenuItem menuitem = sender as MenuItem;
                NavigationService.Navigate(new Uri("/borrar.xaml?id=" + int.Parse(menuitem.CommandParameter.ToString()), UriKind.Relative));
            }

    • Marcado como respuesta cansado293 martes, 4 de febrero de 2014 10:09
    domingo, 2 de febrero de 2014 1:20

Todas las respuestas

  • Yo lo que hago es lo siguiente, por ejemplo para un eliminar es utilizar en XAML para el MenuItem el CommandParameter, le hago un binding con el identificador del objeto que quiero borrar.

    <toolkit:MenuItem  Header="{Binding Path=LocalizedResources.Edit, Source={StaticResource LocalizedStrings}}"  CommandParameter="{Binding ProductID}"  Click="editContext_Click"/>

    Y luego en el evento click hago por ejemplo:

     private void Edit_Click(object sender, RoutedEventArgs e)
            {
                MenuItem menuitem = sender as MenuItem;
                NavigationService.Navigate(new Uri("/borrar.xaml?id=" + int.Parse(menuitem.CommandParameter.ToString()), UriKind.Relative));
            }

    • Marcado como respuesta cansado293 martes, 4 de febrero de 2014 10:09
    domingo, 2 de febrero de 2014 1:20
  • Muchas gracias Alvaro,

    Ya he visto cual era mi error, había creado la función sin argumentos he intentaba buscar algún evento del listbox. Y asi no tenia que hacerlo. Con tu ejemplo ya he logrado hacerlo funcionar.

    Muchas gracias de nuevo

    martes, 4 de febrero de 2014 10:09