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 № 1Você 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;
...
}