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

时间:2013-10-28 17:47:28

标签: c# wpf datagrid casting wpfdatagrid

我有这样的课程

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

使用List<Foo>的视图模型,此列表用作Bind的{​​{1}},然后在代码隐藏中我需要获取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这是否会产生一些差异?

3 个答案:

答案 0 :(得分:34)

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

你应该可以使用:

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

或者如果您不确定DataGrid.SelectedItems包含的内容:

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

答案 1 :(得分:3)

试试这个:

DataGrid.SelectedItems.OfType<Foo>().ToList()

答案 2 :(得分:0)

这是我在用户取消选择列表框中的元素时删除项目的示例。

var req = Listbox1.SelectedItems.OfType<string>().ToList().Where(c => c == item.Name).FirstOrDefault();
if (req==null)
{
    var a = MyMapView.Map.OperationalLayers.Where(c => c.Name == item.Name).FirstOrDefault();
    MyMapView.Map.OperationalLayers.Remove(a);
}