将ListBox视为MultiSelector

时间:2015-08-10 09:58:30

标签: c# .net wpf listbox multi-select

由于某种原因,ListBox不是MultiSelector。相反,它实现了自己的SelectedItems属性 我有一个DataGrid和一个ListBox,我想把它们都当作一个MultiSelector,所以我可以这样做:

var selectedItems = dataGridOrListBox.SelectedItems;

有没有办法做到这一点?
还有一个很好的理由让ListBox不是MultiSelector吗?

1 个答案:

答案 0 :(得分:1)

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