将 ListBox 视为 MultiSelector

Treat ListBox as MultiSelector

出于某种原因ListBox is not a MultiSelector。相反,它实现了自己的 SelectedItems 属性.
我有一个 DataGrid 和一个 ListBox,我想将它们都当作一个 MultiSelector,这样我就可以做这样的事情:

var selectedItems = dataGridOrListBox.SelectedItems;

有办法吗?
还有 ListBox 不是 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;
    ...
}