我正在尝试:
bool hasXItems = (grid.SelectedItems as IEnumerable<Y>).Any(i => ((Y) i).IsX);
这似乎不起作用(投射的结果是null
)。如何使用Linq查询DataGrid.SelectedItems
答案 0 :(得分:6)
我无法从你的评论中看出你想做什么,但你可以这样使用LINQ。
DataGridRow[] results = datagrid.SelectedItems
.OfType<DataGridRow>()
.Where(x => ((bool)x.IsFocused))
.ToArray();
它将迭代所有选定的行并返回聚焦的行。
此查询有4个部分
datagrid.SelectedItems
。该行将所有选定的行作为列表提供,因为SelectedItems返回IList对象。
.OfType<DataGridRow>()
。该行将返回从第1行返回的所有选定行作为DataGridRow。
.Where(x => ((bool)x.IsFocused))
。该行将遍历从第2行返回的所有DataGridRows,以查找哪些行被聚焦。
.ToArray()
。该行将把第3行返回的所有DatagridRows转换为Array并将其放入结果变量中。
答案 1 :(得分:2)
如果您的.IsX()表示“是X”,
grid.SelectedItems.OfType<X>().Any();
否则,
grid.SelectedItems.OfType<Y>().Any(item => item.IsX());