Question

Y at-il un moyen de faire le feu de l'événement selectionChanged chaque fois une sélection dans le listview est cliqué, au lieu de seulement quand il change?

Par exemple, permet de dire que j'ai un ListView avec un seul objet en elle. L'utilisateur clique sur cet objet, et cet objet contient des informations qui renseigne certaines zones de texte ci-dessous. L'utilisateur commence à changer certaines des valeurs de ces champs de saisie (qui ne sont pas liés à l'objet). Ils décident alors qu'ils ne veulent pas ce qui est dans ces zones de texte afin qu'ils aimeraient rétablir tout ce qui est dans l'objet dans le listview. Mais lorsqu'ils cliquent sur l'un objet dans le listview, rien ne se passe, parce que la sélection n'a pas changé.

L'espoir qui fait sens. Quelqu'un sait comment je peux contourner cela?

Était-ce utile?

La solution

Les événements ListView.SelectionChanged et ListViewItem.Selected ne vont pas re-feu si l'élément est déjà sélectionné. Si vous avez besoin de re-feu, vous pourriez « Dessélectionnez » l'élément lorsque les feux de l'événement.

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

vous permettant ainsi de nouveau le sélectionner ad nauseam. Toutefois, si vous n'avez pas besoin de la sélection proprement dite alors vous devez utiliser un ItemsControl .

Si vous voulez maintenir la sélection-capacité de l'élément (s), alors vous devriez regarder l'enregistrement à un événement différent de celui ListView.SelectionChanged ou ListView.Selected. Celui qui fonctionne bien pour cela est PreviewMouseDown, comme la sélection comme élément de départ, nous voulons que cela se produise sur les clics gauche et droit. Nous pourrions joindre à la seule ListViewItem, mais étant donné que la liste peut à un moment donné gagner plus de points, nous pouvons attribuer à tous les éléments en utilisant la propriété ItemContainerStyle de 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);
}

Autres conseils

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

on peut aussi utiliser celui-ci!

 <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>

et dans le code derrière

  private void UIElement_OnTapped(object sender, TappedRoutedEventArgs e)
   {   
           //this fire every time 
   }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top