2017-01-11 14 views
0

次のクエリは、GridViewにバインドできるタイプ<IGrouping<string, ItemsCollection>>を返します。 CollectionViewSourceと一緒に使用される場合、キー(グループ名として)は、グループヘッダー/タイトルを表示するために使用されます。たとえば、TextBlockにバインドしてGridViewのGroupStyle.HeaderTemplateにバインドします。<IGrouping <string、ItemsCollection >>のグループ化キーに、バインドのグループ数情報が追加されるように変更できますか?

var query = from ItemObj in ItemsObjCollection 
orderby ItemObj.ItemName 
group ItemObj by ItemObj.GroupName into groups 
orderby groups.Key 
select groups; 

これまでのところ問題なく、問題なく動作しています。

私は次の試み(難しかったところです)は、グループ名を出力してグループ名を出力するKeyのためのものです。たとえば、 "Group Name [count]"のように変更されますカウントは、クエリのgroups.Count()としてすぐに取得できます。 ItemsObjCollectionがFruitsを表すと仮定すると、ヘッダ出力はApples [10]、Bananas [7]、Oranges [12]などのようになります。

グループ化キーは、出力表示(バインディング経由)の目的で、前述のようにグループカウント情報が付加されるように変更できますか?基本的には、私はKey = $"{groups.Key} [{groups.Count()}]"が好きですが、どのようにクエリ内で知りません。線に沿ってみました:

select new { Key = $"{groups.Key} [{groups.Count()}]", Items = groups };

が、私の修正キーバインディングに表示されない、これまでに取得していません。私はそれがIGroupingのインスタンスを作成するのは簡単ではないこともわかります(それはインターフェイスなので)。そして、上記のクエリ文の中でそれを行う巧妙な方法があることを望みます。

+0

文字列と整数を組み合わせるので、これを試してみましょう。select new {Key = groups.Key + groups.Count()。ToString()、Items = groups}; – jdweng

+0

それはそうではありません。私はちょうどC#6.0の最新の文字列補間構文を使用しているので、あなたが言うことと私が言うことは同等です。文字列補間器である$ "{var} ..."を参照してください。 – user2921851

+0

あなたのお問い合わせはOKです。バインディングはどうですか? –

答えて

1

私はそれを解決しましたが、きれいではないかもしれません。基本的には、上記のクエリ結果に基づいて新しいクエリを作成しましたが、必要に応じてグループ化キーを変更しました。そのためには、新しいグループを作成するために新しいクラスが必要でした。

public class NewGrouping<TKey, TElement> : List<TElement>, IGrouping<TKey, TElement> 
{ 
    public TKey Key { get; set; } 
} 

次に、新しいグループが古いグループ化を繰り返すことによって形成された - Key = $"{grp.Key} [{grp.Count()}]"として追加情報を修正キーとプロセスで。

List<IGrouping<string, ItemsObjCollection>> newQuery = new List<IGrouping<string, ItemsObjCollection>>(); 

foreach (var grp in query) 
{ 
    NewGrouping<string, ItemsObjCollection> newGroup = new NewGrouping<string, ItemsObjCollection>() { Key = $"{grp.Key} [{grp.Count()}]" }; 
    newGroup.AddRange(grp.ToList()); 

    newQuery.Add(newGroup); 
} 

利用newQueryの代わりに、GridViewコントロール、および出来上がりに結合するためquery!期待どおりに動作します。

PS:なぜ誰かが私の質問をあまり役に立たない/研究したと投票したのは不思議です。これは簡単な質問ではなく、おそらくその人がその質問を理解していないのです。

0

すでにあります。group.Countです。

関連する問題