我有这个绑定到 ObservableCollection 的 ListBox。列表中的每个对象都实现了一个名为 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 属性添加到集合中并将其绑定到 ListBox 的 SelectItemProperty 但没有运气。