c# - 将 Datagrid.SelectedItems 集合转换到 List<T>

标签 c# wpf casting datagrid

我有这样的课

public class Foo
{
    public string prop1 {get;set;}
    public string prop2 {get;set;}
}

还有一个带有 List<Foo> 的 View 模型, 此列表用作 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();

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

正确的转换方式是什么?

注意: DataGrid 的基类型是一个 ObservableCollection这有什么不同吗?

最佳答案

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

你应该能够使用:

List<Foo> SelectedItemsList = DataGrid.SelectedItems.Cast<Foo>().ToList();

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

List<Foo> SelectedItemsList = DataGrid.SelectedItems.OfType<Foo>().ToList()

关于c# - 将 Datagrid.SelectedItems 集合转换到 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641625/

相关文章:

c# - 测试时的努力问题

c# - EF upsert 是否必须手动完成?

WPF:XAML 自定义命名空间

ios - “[自身数据] [日期]”是什么意思?

c# - TagBuilder.MergeAttributes 未按预期工作

c# 绑定(bind)到嵌套对象上的字段

c# - 使用 Prism - WPF 关闭动态添加的选项卡项

c# - SpellCheck .Net 类是否支持俄语?

PHP 类型转换

java - 故意失去精度