将 Datagrid.SelectedItems 集合强制转换为 List

本文关键字:List 转换 Datagrid SelectedItems 集合 | 更新日期: 2023-09-27 18:37:14

我有这样的类

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

而一个带有List<Foo>的视图模型,这个列表被用作一个DataGridBind,那么在代码隐藏中我需要获取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这是否有所不同?

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

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

您应该能够使用:

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

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

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

试试这个:

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

下面是一个示例,用于在用户取消选择 ListBox 中的元素时删除项目。

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);
}
相关文章: