Treat ListBox as MultiSelector
本文关键字:MultiSelector as ListBox Treat | 更新日期: 2023-09-27 18:07:18
由于某些原因,ListBox不是MultiSelector。相反,它实现自己的SelectedItems属性。
我有一个DataGrid和一个ListBox,我想把它们都当作MultiSelector,这样我就可以这样做:
var selectedItems = dataGridOrListBox.SelectedItems;
有办法做到这一点吗?
也有一个很好的理由,ListBox不是一个多选择器?
你可以创建自己的MultiSelector接口和派生的ListBox和DataGrid类来实现它:
public interface IMultiSelector
{
IList SelectedItems { get; }
}
public class MyListBox : ListBox, IMultiSelector
{
}
public class MyDataGrid : DataGrid, IMultiSelector
{
}
在XAML中这样使用它们:
<local:MyListBox ... SelectionChanged="OnSelectionChanged"/>
<local:MyDataGrid ... SelectionChanged="OnSelectionChanged"/>
现在你可以像这样访问常见的SelectedItems属性(例如,在常见的SelectionChanged处理程序中):
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var multiSelector = (IMultiSelector)sender;
var selectedItems = multiSelector.SelectedItems;
...
}