我有一个ListBox,它绑定到一个ObservableCollection。
我想在释放鼠标时选择一个ListBoxItem(意思是MouseLeftButtonUp),并且我需要切换选择。意味着当ListBoxItem被选中时,再次选择该项目将取消选择该项目,反之亦然。
当ListBoxItem被选中时,我也需要应用不同的样式。
我试过如下。
我已经为ListBoxItem使用了DataTemplate和Style,在EventSetter中,我已经为MouseLeftButtonUp订阅了事件,在事件处理程序中,我正在选择项目并切换它。
问题是有多种方法可以选择项目(Ctrl+箭头键、Shift+箭头键,箭头键、Ctrl+A)并为选择应用样式。
我已使用"Name"属性存储ListBoxItem的以前状态(Tag属性已用于DataTemplate中数据绑定的其他目的)。
我们如何才能做到这一点?
任何想法都将不胜感激。
我建议的第一件事是忘记使用MouseLeftButtonUp,而是将控件的SelectedItem绑定到代码中的一个变量。这样,如果用户决定使用键盘,那么所有的东西都会被困住。
<ListBox x:Name="lbItems" ItemsSource="{Binding Path=MyListItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/>
public ObservableCollection<YourClass> MyListItems
public YourClass SelectedItem
一旦用户选择项目,就会自动设置SelectedItem。
然后我会问,如果他们再次点击该项目,是否应该取消选择?这不是标准行为,您需要取消选择该项目吗?
如果你想记录之前选择的项目,你可以有一个
private YourClass _previousSelectedItem;
private YourClass _selectedItem;
public YourClass SelectedItem
{
get { return _selectedItem;}
set { if (_selectedItem == value) return;
_previousSelectedItem = _selectedItem;
_selectedItem = value;
}
}
SelectedItem更改时设置的。
这给了你一些想法吗?