Мне нужно реализовать пользовательское поведение для элемента управления ListBox в wpf. Идея состоит в том, чтобы отключить отменить выбор последнего выбранного элемента. Согласно поведению по умолчанию, когда пользователь нажимает на выбранный элемент мышью, удерживая нажатой клавишу ctrl, выбор исчезает. Мне нужно реализовать некоторую логику, чтобы сделать listbox ничего не делать, когда пользователь нажимает кнопку мыши + ctrl на последний выбранный элемент.Лучший способ предотвратить удаление выбранного последнего элемента в ListBox
Единственный подход я нашел это подписаться на ListBox.SelectionChanged и сделать что-то вроде этого:
private static void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var listBox = sender as ListBox;
if (listBox != null && e.RemovedItems != null && e.RemovedItems.Count == 1)
{
var removed = e.RemovedItems[0];
if (listBox.SelectedItems.Count == 0)
{
if (listBox.SelectionMode == System.Windows.Controls.SelectionMode.Single)
{
listBox.SelectedItem = removed;
}
else
{
listBox.SelectedItems.Add(removed);
}
e.Handled = true;
}
}
}
, но это решение не подходит для меня, потому что в этом случае некоторые нежелательные звонки происходит, когда ListBox. SelectedItem привязан к свойству viewmodel.
псевдо CallStack (при отмене выбора выбранного элемента):
SelectedItem изменено на нуль
listBox_SelectionChanged называется
SelectedItem устанавливается в предыдущее значение
Все, что я хочу, это тот шаг с 1 и 3 никогда не бывает. Это важно, потому что, когда SelectedItem изменяет, запускается некоторая длительная работа async.
Спасибо, любые советы будут оценены!
Вы можете удалить свой вопрос или отметить свой ответ, как принято (после того, как, если я прав, 1 день) –
Спасибо, Войцех Кулик, Приму свой ответ, в течение примерно 40 минут из-за ограничение^__ ^ – garek