从linq查询返回ObservableCollection

时间:2012-05-15 06:32:59

标签: c# .net wpf linq windows-runtime

我有以下linq片段

注意 - >这是Metro App,ICollectionView无法按预期进行分组/排序。

        ObservableCollection<int> ints = new ObservableCollection<int>();
        ints.Add(3);
        ints.Add(4);
        ints.Add(5);
        ints.Add(6);
        ints.Add(3);
        ints.Add(4);
        ints.Add(1);
        ints.Add(2);


        var groupedInts = ints.GroupBy(i=>i).Select(i=>  new {Key=i.Key, Count=i.Count()});

我想要关注

  1. 订阅与其对应的groupsInts或ObservableCollection(基本上是从WPF / Metro UI到groupInts的数据绑定)

  2. int中的任何更改(原始observablecollection)都应该由groupsInts反映(以便订阅groupInts /相关的ObservableCollection的UI可以显示更改)。

  3. 在实际情况中,数据结构稍微复杂(6-7属性),但问题可归结为上述问题。

3 个答案:

答案 0 :(得分:1)

处理ints.CollectionChanged事件并使用相同的LINQ查询刷新groupedInts变量...

答案 1 :(得分:1)

我有两种方法可以想到。

第一:使用Bindable Linq / Continuous Linq

第二次:为groupsInts创建一个单独的CollectionView。当原始集合发生变化时,它应该随之改变。 Here's a nice and neat tutorial

AngelWPFs将LINQ属性通知为已更改的想法也是可行的。

答案 2 :(得分:1)

您需要我的ObservableComputations库。使用该库,您可以像这样进行编码:

ObservableCollection<int> ints = new ObservableCollection<int>();

ints.Add(3);
ints.Add(4);
ints.Add(5);
ints.Add(6);
ints.Add(3);
ints.Add(4);
ints.Add(1);
ints.Add(2);

var groupedInts = ints.Grouping(i=>i).Selecting(ig =>  new {Key=ig.Key, Count=ig.Count});

groupedInts为ObservableCollection,反映了ints集合中的所有更改。