将 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;
...
}
出于某种原因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;
...
}