1

我有以下 linq 片段

注意-> 这是 Metro 应用程序,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. 订阅与之对应的 groupedInts 或 ObservableCollection(基本上是从 WPF/Metro UI 到 groupInts 的数据绑定)

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

在实际场景中,数据结构稍微复杂(6-7个属性),但问题归结为上述问题。

4

3 回答 3

1

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

于 2012-05-15T06:48:42.910 回答
1

我能想到的方法有两种。

1st : 使用 Bindable Linq / Continuous Linq

第二:为 groupedInts 创建一个单独的 CollectionView。当原始集合发生变化时,它应该随之变化。这是一个漂亮而整洁的教程

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

于 2012-05-15T06:53:52.017 回答
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 集合中的所有变化。

于 2019-11-19T09:27:20.983 回答