/ / Tratar ListBox como MultiSelector - c #, .net, wpf, listbox, multi-select

Trate ListBox como MultiSelector - c #, .net, wpf, listbox, multi-select

Por alguma razão, ListBox não é um MultiSelector. Em vez disso, implementa sua própria propriedade SelectedItems.
eu tenho um Grade de dados e um ListBox e eu quero tratá-los como um MultiSelector, para que eu possa fazer algo assim:

var selectedItems = dataGridOrListBox.SelectedItems;

Existe uma maneira de fazer isso?
Também há uma boa razão para o ListBox não ser um MultiSelector?

Respostas:

1 para resposta № 1

Você poderia criar sua própria interface MultiSelector e derivadas ListBox e DataGrid classes que o implementam:

public interface IMultiSelector
{
IList SelectedItems { get; }
}

public class MyListBox : ListBox, IMultiSelector
{
}

public class MyDataGrid : DataGrid, IMultiSelector
{
}

Use-os no XAML assim:

<local:MyListBox ... SelectionChanged="OnSelectionChanged"/>
<local:MyDataGrid ... SelectionChanged="OnSelectionChanged"/>

Agora você pode acessar a propriedade SelectedItems comum (por exemplo, em um manipulador SelectionChanged comum) assim:

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var multiSelector = (IMultiSelector)sender;
var selectedItems = multiSelector.SelectedItems;
...
}