Выбор ListBoxItem в MouseLeftButtonUp - PullRequest
       36

Выбор ListBoxItem в MouseLeftButtonUp

1 голос
/ 26 марта 2012

У меня есть ListBox, который связан с ObservableCollection.

Я хочу выбрать ListBoxItem, когда мышь отпущена (означает MouseLeftButtonUp), а также мне нужно переключить выбор.Означает, что при выборе ListBoxItem повторное выделение элемента отменяет выбор элемента и наоборот.

Когда выбран элемент ListBoxItem, мне также необходимо применить другой стиль.

Я пробовал какследующее.

Я использовал DataTemplate и стиль для ListBoxItem, в EventSetter я подписал событие для MouseLeftButtonUp и в обработчике событий я выбираю элемент и переключаю его.

Проблема в том, что существует несколько способов выбора элемента (клавиши Ctrl + стрелка, клавиши Shift + стрелка, клавиши со стрелками, Ctrl + A) и применение стиля для выбора.

Я использовал 'Свойство Name для хранения предыдущего состояния ListBoxItem (свойство Tag, уже использованное для других целей привязки данных в DataTemplate).

Как этого добиться?

Любая идея будетс благодарностью.

1 Ответ

0 голосов
/ 26 марта 2012

Первое, что я хотел бы предложить, это забыть использовать MouseLeftButtonUp и вместо этого связать SelectedItem элемента управления с переменной в вашем коде. Таким образом, если пользователь решит использовать клавиатуру, все в ловушке.

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

public ObservableCollection<YourClass> MyListItems
public YourClass SelectedItem

Это автоматически устанавливает SelectedItem, как только пользователь выбирает элемент.

Тогда я хотел бы спросить, должен ли элемент отменить выбор, если они щелкают по нему снова? Это не стандартное поведение, вам нужно отменить выбор элемента?

Если вы хотите записать ранее выбранный элемент, вы можете иметь

private YourClass _previousSelectedItem;

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

Который вы устанавливаете при изменении SelectedItem.

Это дает вам некоторые идеи?

...