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不是一个多选择器?

Treat ListBox as MultiSelector

你可以创建自己的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;
    ...
}