Frage

Gibt es eine Möglichkeit, die selection Ereignis Feuer jedes Mal eine Auswahl in der Listenansicht geklickt wird, statt nur zu machen, wenn sie sich ändert?

Zum Beispiel kann sagen, ich habe eine Listview mit nur einem Objekt darin. Der Benutzer klickt das Objekt, und das Objekt enthält Informationen, die einige Textfelder unter auffüllt. Der Benutzer startet einige der Werte in diesen Textfelder zu ändern (die nicht an das Objekt gebunden ist). Sie entscheiden dann, dass sie nicht wollen, was in diesen Textfeldern ist so möchten sie alles zurückzustellen, was in der Listenansicht in das Objekt. Aber wenn sie das ein Objekt in der Listenansicht klicken, passiert nichts, da die Auswahl nicht geändert hat.

Ich hoffe, das macht Sinn. Wer weiß, wie ich dieses Problem umgehen kann?

War es hilfreich?

Lösung

Die ListView.SelectionChanged und ListViewItem.Selected Ereignisse werden nicht zu Feuer wieder, wenn das Element bereits ausgewählt ist. Wenn Sie brauchen wieder feuern sie, man könnte ‚deselect‘ das Element, wenn das Ereignis ausgelöst wird.

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

So so dass Sie wieder wählen Sie es bis zum Überdruss. Allerdings, wenn Sie brauchen nicht die tatsächliche Auswahl dann sollten Sie eine Items .

Wenn Sie die select-Fähigkeit des Elements halten wollen (s), dann sollten Sie zu einem anderen Ereignisse aussehen als ListView.SelectionChanged bei der Registrierung oder ListView.Selected. Eine, die gut für dies funktioniert, ist Preview, so wie auch die erste Artikelauswahl wir es auf beiden linken und rechten Klicks erfolgen sollen. Wir könnten es mit dem einzigen ListViewItem befestigen, aber da die Liste an einem gewissen Punkt können mehr Einzelteile gewinnen, können wir es für alle Elemente unter Verwendung der ItemContainerStyle Eigenschaft der Listview zuweisen können.

<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);
}

Andere Tipps

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

auch wir können dieses verwenden!

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

und im Code hinter

  private void UIElement_OnTapped(object sender, TappedRoutedEventArgs e)
   {   
           //this fire every time 
   }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top