我有以下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()});
我想要关注
订阅与其对应的groupsInts或ObservableCollection(基本上是从WPF / Metro UI到groupInts的数据绑定)
int中的任何更改(原始observablecollection)都应该由groupsInts反映(以便订阅groupInts /相关的ObservableCollection的UI可以显示更改)。
在实际情况中,数据结构稍微复杂(6-7属性),但问题可归结为上述问题。
答案 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集合中的所有更改。