19

我有这样的课

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

还有一个带有 a 的视图模型List<Foo>,这个列表用作Bindone 的一个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();

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

投射它的正确方法是什么?

注意: Base Type of DataGridis anObservableCollection这有什么不同吗?

4

3 回答 3

44

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

您应该能够使用:

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

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

List<Foo> SelectedItemsList = DataGrid.SelectedItems.OfType<Foo>().ToList()
于 2013-10-28T17:53:09.410 回答
3

尝试这个:

DataGrid.SelectedItems.OfType<Foo>().ToList()
于 2013-10-28T17:49:03.077 回答
0

这是一个示例,当用户取消选择 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);
}
于 2020-01-10T14:00:58.340 回答