我有一个绑定到ObservableCollection的ListBox。
我想在释放鼠标时选择一个ListBoxItem(意味着MouseLeftButtonUp),并且我需要切换选择。表示选择ListBoxItem后,再次选择该项将取消选择该项,反之亦然。
当选择ListBoxItem时,我也需要应用不同的样式。
我试过以下。
我在ListBoxItem中使用了DataTemplate和Style,在EventSetter中,我为MouseLeftButtonUp订阅了事件,在事件处理程序中我选择了项目并切换它。
问题是有多种方法可以选择项目(Ctrl +箭头键,Shift +箭头键,箭头键,Ctrl + A)并应用样式进行选择。
我使用'Name'属性来存储ListBoxItem的先前状态(Tag属性已经用于DataTemplate中Data绑定的其他用途)。
我们如何实现这一目标?
任何想法都将受到高度赞赏。
答案 0 :(得分:0)
我建议的第一件事是忘记使用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更改时设置的内容。
这会给你一些想法吗?