2

我正在尝试做:

bool hasXItems = (grid.SelectedItems as IEnumerable<Y>).Any(i => ((Y) i).IsX);

这似乎不起作用(铸造的结果是null)。如何DataGrid.SelectedItems使用 Linq 查询?

这是我要查询的属性:http: //msdn.microsoft.com/en-us/library/system.windows.controls.primitives.multiselector.selecteditems (v=vs.90).aspx

4

2 回答 2

6

我无法从您的评论中弄清楚您想要做什么,但您可以通过这种方式使用 LINQ。

DataGridRow[] results = datagrid.SelectedItems
                                .OfType<DataGridRow>()
                                .Where(x => ((bool)x.IsFocused))
                                .ToArray();

它将遍历所有选定的行并返回聚焦的行。

此查询有 4 个部分

  1. datagrid.SelectedItems. 此行会将所有选定的行作为列表提供,因为 SelectedItems 返回一个 IList 对象。

  2. .OfType<DataGridRow>(). 此行将从第 1 行返回的所有选定行作为 DataGridRow 返回。

  3. .Where(x => ((bool)x.IsFocused)). 此行将遍历从第 2 行返回的所有 DataGridRows 以查找聚焦的行。

  4. .ToArray(). 此行会将第 3 行返回的所有聚焦的 DatagridRows 转换为 Array 并将其放入 results 变量中。

于 2012-05-17T13:51:42.940 回答
2

如果您的 .IsX() 表示“是 X”,

grid.SelectedItems.OfType<X>().Any();

否则,

grid.SelectedItems.OfType<Y>().Any(item => item.IsX());
于 2012-05-17T13:57:47.187 回答