Как вы гарантируете, что пользователь выбрал хотя бы один элемент в ListView?

#wpf

#wpf

Вопрос:

Для ListView как вы можете сделать так, чтобы вы НЕ могли отменить выбор выбранного индекса, удерживая кнопку управления при выборе любого элемента?

Большое вам спасибо

Ответ №1:

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

Как указала Андреа, они также могут отменить выбор с помощью сочетаний клавиш. Вместо этого я думаю, вам следует подписаться на SelectionChangedEvent. Затем вы можете просмотреть удаленные элементы и отметить их как выбранные:

     void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        foreach (var item in e.RemovedItems)
        {
            myList.SelectedItems.Add(item);
        }
    }
  

Комментарии:

1. Этого недостаточно, элемент также может быть выбран с помощью Ctrl Пробел, стилуса или любых других средств.

2. В этом случае, когда будет вызван ваш обработчик событий, возможно, уже были вызваны другие обработчики, зарегистрированные в событии SelectionChanged, и логике приложения придется пострадать.

3. Это правда, вам нужно быть осторожным с этим — хотя на практике у меня не было особых проблем с этим. Если вы действительно хотите быть в безопасности, вам нужно будет написать свой собственный элемент управления списком, который наследуется от Microsoft, и тогда вы сможете обрабатывать события, прежде чем кто-либо другой получит шанс.

4. Просто мысль (5 лет спустя): почему бы не привязать IsEnabled к IsSelected с обратным логическим преобразователем? Один выстрел — одно уничтожение.