将Datagrid.SelectedItems集合转换为List <T>

Jua*_*mez 16 c# wpf datagrid casting wpfdatagrid

我有这样的课

public class Foo
{
    public string prop1 {get;set;}
    public string prop1 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

和一个带有a的视图模型List<Foo>,这个列表被用作Bind一个DataGrid,然后在代码隐藏中我需要获取 Datagrid.SelectedItems集合并将其转换为List<Foo>

我尝试过的事情:

List<Foo> SelectedItemsList= (List<Foo>)DataGrid.SelectedItems;
// OR
object p = DataGrid.SelectedItems;
List<Foo> SelectedItemsList= ((IList)p).Cast<Foo>().ToList();
Run Code Online (Sandbox Code Playgroud)

所有这些方式编译但在运行时抛出异常.

施放它的正确方法是什么?

注意:基本类型DataGrid是这ObservableCollection是否有所不同?

Air*_*irL 35

确保使用System.Linq命名空间:

你应该可以使用:

List<Foo> SelectedItemsList = DataGrid.SelectedItems.Cast<Foo>().ToList();
Run Code Online (Sandbox Code Playgroud)

或者如果你不确定DataGrid.SelectedItems包含什么:

List<Foo> SelectedItemsList = DataGrid.SelectedItems.OfType<Foo>().ToList()
Run Code Online (Sandbox Code Playgroud)