2

私がやろうとしていること:

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

これは機能していないようです(キャストの結果はですnull)。DataGrid.SelectedItemsLinqでクエリを実行するにはどうすればよいですか?

これは私が照会しているプロパティです: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から返されたすべてのDataGridRowを繰り返し処理して、フォーカスされている行を見つけます。

  4. .ToArray()。この行は、行3によって返されたフォーカスされたすべてのDatagridRowsを配列に変換し、結果変数に入れます。

于 2012-05-17T13:51:42.940 に答える
2

.IsX()が「isX」を意味する場合、

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

さもないと、

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