Я уже решил эту проблему, зарегистрировав ClassHandler для SelectedEvent элемента управления ListBox.
Я только что добавил это в конструктор моего класса MainWindow:
EventManager.RegisterClassHandler(typeof(ListBox),
ListBox.SelectedEvent,
new RoutedEventHandler(this.ListBox_OnSelected));
Таким образом, мой обработчик события ListBox_OnSelected будет вызываться всякий раз, когда вызывается список, и до вызова обработчиков событий самого элемента управления.
В MainWindowViewModel у меня есть свойство SelectedListBox, которое отслеживает, какой из них выбран:
public System.Windows.Controls.ListBox SelectedListBox
{
get { return this.selectedListBox; }
set
{
if (this.selectedListBox != null)
{
this.selectedListBox.UnselectAll();
}
this.selectedListBox = value;
}
}
Почему бы не использовать простой обработчик событий SelectionChanged? Поскольку в приведенном выше коде каждый раз, когда вы отменяете выбор списка, он снова вызывает одно и то же событие, получая бесконечный цикл событий, который, к счастью, WPF может остановить.