2016-03-26 16 views
0

Ich habe ein Raster, und ich möchte onclick Ereignis hinzufügen.Auf klicken Ereignis in GridView

<ListView 
    HorizontalAlignment="Stretch" 
    Margin="10" 
    x:Name="BooksListView" 
    GridViewColumnHeader.Click="SortBooks" 
    > 
    <ListView.View> 
     <GridView></GridView> 
    </ListView.View> 
</ListView> 

ich die akzeptierte Antwort von dieser SO question versucht haben, aber item.IsSelected ist immer falsch.

<ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" /> 
     </Style> 
    </ListView.ItemContainerStyle> 

C# -Code:

private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var item = sender as ListViewItem; 
    if (item != null && item.IsSelected) // IsSelected is always false 
    ... 
} 

Sollte ich diese Prüfung nur entfernen, oder gibt es einen besseren Weg, es zu tun?

+0

Sie können diese Überprüfung entfernen, wenn es für Ihre Geschäftslogik nicht kritisch ist. –

+0

Sie können die item.IsSelected auf "true" setzen, wenn Sie dies benötigen, aber ich vermute, dass die Eigenschaft unmittelbar nach dem Ende der Event-Handler-Methode gesetzt wird. Ich würde definitiv empfehlen, das MouseLeftButtonDown-, MouseDown- oder MouseLeftButtonUp-Ereignis und nicht das Vorschau-Ereignis zu verwenden. Durch Auswählen des Elements wird das Ereignis ausgelöst und der Handler ausgeführt, sodass Sie sicher sein können, dass IsSelected wahr ist. Einfach diesen Check loswerden oder ein Preview Event verwenden. Ich neige dazu, das MouseUp-Ereignis zu verwenden, um die Maus aus dem Objekt zu ziehen und loszulassen, wenn es versehentlich ausgewählt wurde. – SimperT

+0

@Matt Hat die Antwort für dich funktioniert? –

Antwort

0

Es handelt sich um ein Vorschau-Ereignis, sodass das Element noch nicht erreicht wurde. Deshalb gibt item.IsSelected immer falsch für Sie zurück.

Weitere Informationen finden Sie hier What are WPF Preview Events?

Grundsätzlich Vorschau Ereignisse behandelt werden, wenn Sie sagen, ein Ereignis abbrechen möchten, bevor es Ziel erreicht es ist. Es ist üblicher, die Art von Ereignissen zu behandeln. Vielleicht sollten Sie versuchen MouseLeftButtonDown. Es gibt ein wenig mehr Vergleich hier Difference between PreviewMouseLeftButtonDown and MouseLeftButtonDown WPF

+1

Dies ist keine Antwort. –

+0

@TrevorClarke Bearbeitet, um mehr Details bereitzustellen –

Verwandte Themen