2012-03-26 9 views
0

Ich habe eine ListBox, die an eine ObservableCollection gebunden ist.ListBoxItem-Auswahl auf MouseLeftButtonUp

Ich möchte ein ListBoxItem auswählen, wenn die Maus freigegeben wird (bedeutet MouseLeftButtonUp) und ich muss auch die Auswahl umschalten. Bedeutet, wenn das ListBoxItem ausgewählt ist, wird die Auswahl des Elements wieder aufgehoben und umgekehrt.

Wenn das ListBoxItem ausgewählt ist, muss ich auch den anderen Stil anwenden.

Ich habe wie folgt versucht.

Ich habe das DataTemplate und den Style für das ListBoxItem verwendet, im EventSetter habe ich das Event für MouseLeftButtonUp abonniert und im Event-Handler wähle ich das Element aus und togge es an.

Das Problem besteht darin, gibt es mehrere Möglichkeiten, um das Element (Strg + Pfeiltasten, Umschalt + Pfeiltasten, Pfeiltasten, Strg + A) auszuwählen und den Stil für die Auswahl anzuwenden.

Ich habe die 'Name' Eigenschaft verwendet, um den vorherigen Zustand des ListBoxItem (Tag-Eigenschaft bereits für andere Zwecke der Datenbindung in der DataTemplate verwendet) zu speichern.

Wie können wir das erreichen?

Jede Idee wird sehr geschätzt.

Antwort

0

Das erste, was ich vorschlagen würde vergessen, MouseLeftButtonUp verwenden und stattdessen das SelectedItem des Steuerelements an eine Variable in Ihrem Code binden. Auf diese Weise wird, wenn sich ein Benutzer entscheidet, die Tastatur zu benutzen, alles gefangen.

<ListBox x:Name="lbItems" ItemsSource="{Binding Path=MyListItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/> 

public ObservableCollection<YourClass> MyListItems 
public YourClass SelectedItem 

Dies setzt SelectedItem automatisch, sobald der Benutzer ein Element auswählt.

Dann würde ich fragen, sollte der Artikel abwählen, wenn sie es erneut klicken? Das ist kein Standardverhalten, müssen Sie das Element abwählen?

Wenn Sie das zuvor ausgewählte Element aufnehmen möchten, könnten Sie haben eine

private YourClass _previousSelectedItem; 

private YourClass _selectedItem; 
public YourClass SelectedItem 
    { 
    get { return _selectedItem;} 
    set { if (_selectedItem == value) return; 
      _previousSelectedItem = _selectedItem; 
      _selectedItem = value; 
     } 
    } 

Welche Sie, wenn SelectedItem Änderungen einstellen.

Gibt Ihnen das ein paar Ideen?

Verwandte Themen