listview.selectionchanged, puedo hacer que el fuego cada vez que haga clic en un artículo?

StackOverflow https://stackoverflow.com/questions/1089321

Pregunta

¿Hay una manera de hacer el fuego SelectionChanged evento cada vez que se hace clic en una selección en la vista de lista, en lugar de sólo cuando se cambia?

Por ejemplo, digamos que tengo una vista de lista con sólo un objeto en ella. El usuario hace clic en ese objeto, y ese objeto contiene información que rellena algunos cuadros de texto a continuación. El usuario inicia el cambio de algunos de los valores en estos cuadros de texto (que no están vinculados al objeto). Entonces deciden que ellos no quieren lo que es en esos cuadros de texto para que les gustaría restablecer todo lo que está en el objeto en la vista de lista. Pero cuando hacen clic en el objeto en la vista de lista, no pasa nada, porque la selección no ha cambiado.

La esperanza que tiene sentido. Alguien sabe cómo puedo evitar esto?

¿Fue útil?

Solución

Los eventos ListView.SelectionChanged y ListViewItem.Selected no van a volver a fuego si el objeto ya se ha seleccionado. Si necesita volver a disparar, que podría 'anular la selección' del artículo cuando se activa el evento.

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (var item in e.AddedItems.OfType<ListViewItem>())
    {
        Trace.WriteLine("ListViewItem Selected");
        item.IsSelected = false;
    }
}

Por lo tanto lo que le permite volver a seleccionar hasta la saciedad. Sin embargo, si usted no necesita la selección real, entonces debería estar utilizando un ItemsControl .

Si desea mantener el select-capacidad del artículo (s) a continuación, usted debe buscar en inscribirse para un evento diferente que ListView.SelectionChanged o ListView.Selected. Uno que funciona bien para esto es PreviewMouseDown, ya que al igual que la selección inicial elemento que queremos que se presenta en ambos clics izquierdo y derecho. Podríamos adjuntarlo a la única ListViewItem, pero ya que la lista puede en algún momento obtener más artículos, podemos asignar a todos los artículos mediante la propiedad ItemContainerStyle del ListView.

<ListView SelectionChanged="ListView_SelectionChanged">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <EventSetter Event="PreviewMouseDown"
                         Handler="ListViewItem_PreviewMouseDown" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListViewItem>Item 1</ListViewItem>
    <ListViewItem>Item 2</ListViewItem>
    <ListViewItem>Item 3</ListViewItem>
    <ListViewItem>Item 4</ListViewItem>
</ListView>


private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    Trace.WriteLine("ListViewItem Clicked: " + (sender as ListViewItem).Content);
}

Otros consejos

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       if(ListView.SelectedIndex != -1)
         {
         //to do staff
         }
       ListView.SelectedIndex = -1;
 }

También podemos utilizar este!

 <ListView x:Name="ListView" 
                                  Height="Auto" SelectionChanged="ListView_OnSelectionChanged"
                                  Width="260"
                                  Margin="0,-12,0,-25">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <TextBlock Text="{Binding name_to_show_menu,Mode=TwoWay}" Tapped="UIElement_OnTapped"></TextBlock>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>

y en el código detrás

  private void UIElement_OnTapped(object sender, TappedRoutedEventArgs e)
   {   
           //this fire every time 
   }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top