У меня есть этот ListBox, который связан с ObservableCollection. Каждый объект в списке реализует интерфейс с именем ISelectable
public interface ISelectable : INotifyPropertyChanged
{
event EventHandler IsSelected;
bool Selected { get; set; }
string DisplayText { get; }
}
Я хочу отслеживать, какой объект выбран независимо от того, как он выбран. Пользователь может щелкнуть мышью на представлении объекта в ListBox, но может также случиться так, что объект будет выбран с помощью кода. Если пользователь выбирает объект через ListBox, я преобразую выбранный элемент в ISelectable и устанавливаю для свойства Selected значение true.
ISelectable selectable = (ISelectable)e.AddedItems[0];
selectable.Selected = true;
Моя проблема в том, что когда я выбираю объект с помощью кода, я не могу получить ListBox для изменения выбранного элемента. Я использую DataTemplate, чтобы показать выбранный объект другим цветом, что означает, что все отображается правильно. Но ListBox имеет последний объект, который пользователь щелкнул, как SelectedItem, что означает, что элемент нельзя щелкнуть без предварительного выбора другого объекта в списке.
У кого-нибудь есть идеи, как это решить? Я почти уверен, что смогу достичь того, чего хочу, написав некоторый пользовательский код для обработки событий мыши и клавиатуры, но я, скорее, нет. Я попытался добавить свойство SelectedItem в коллекцию и связать его с SelectItemProperty ListBox, но не повезло.