c# - Transmitir colección Datagrid.SelectedItems a List<T>
wpf casting (2)
Tengo una clase como esta
public class Foo
{
public string prop1 {get;set;}
public string prop1 {get;set;}
}
Y un modelo de vista con una List<Foo>
, esta lista se usa como una Bind
de una DataGrid
, luego, en el código subyacente, necesito obtener la colección Datagrid.SelectedItems
y convertirla a List<Foo>
Cosas que probé:
List<Foo> SelectedItemsList= (List<Foo>)DataGrid.SelectedItems;
// OR
object p = DataGrid.SelectedItems;
List<Foo> SelectedItemsList= ((IList)p).Cast<Foo>().ToList();
Todas estas formas se compilan pero lanzan una excepción en tiempo de ejecución.
¿Cuál es la forma correcta de lanzarlo?
NOTA: El tipo base de DataGrid
es un ObservableCollection
¿esto hace alguna diferencia?
Asegúrese de usar el espacio de nombres System.Linq
luego:
Deberías poder usar:
List<Foo> SelectedItemsList = DataGrid.SelectedItems.Cast<Foo>().ToList();
o si no está seguro de qué contiene DataGrid.SelectedItems
:
List<Foo> SelectedItemsList = DataGrid.SelectedItems.OfType<Foo>().ToList()
Prueba esto:
DataGrid.SelectedItems.OfType<Foo>().ToList()