WPF-LINQ与可观测收集

WPF-LINQ与可观测收集,wpf,linq,observablecollection,Wpf,Linq,Observablecollection,在我的WPF应用程序中,我希望尽可能多地使用LINQ(尤其是为了避免foreach)。但WPF在ObservableCollection中非常有效,我不能将LINQ用于此类集合。我能做什么?什么使您认为不能将LINQ与ObservableCollection一起使用?它实现了收集,所以应该可以 例如: using System; using System.Collections.ObjectModel; using System.Linq; class Test { static vo

在我的WPF应用程序中,我希望尽可能多地使用LINQ(尤其是为了避免
foreach
)。但WPF在ObservableCollection中非常有效,我不能将LINQ用于此类集合。我能做什么?

什么使您认为不能将LINQ与
ObservableCollection一起使用?它实现了
收集
,所以应该可以

例如:

using System;
using System.Collections.ObjectModel;
using System.Linq;

class Test
{
    static void Main()
    {
        var collection = new ObservableCollection<int>()
        {
            1, 2, 3, 6, 8, 2, 4, 5, 3
        };

        var query = collection.Where(x => x % 2 == 0);
        foreach (int x in query)
        {
            Console.WriteLine(x);
        }
    }
}
使用系统;
使用System.Collections.ObjectModel;
使用System.Linq;
课堂测试
{
静态void Main()
{
var集合=新的ObservableCollection()
{
1, 2, 3, 6, 8, 2, 4, 5, 3
};
var query=collection.Where(x=>x%2==0);
foreach(查询中的int x)
{
控制台写入线(x);
}
}
}

仅适用于可能遇到此问题的任何其他人,他们试图筛选一个可观察到的集合,但发现他们不能


Jon是绝对正确的,没有理由不能这样做,但对于新手或使用WPF开发了一段时间的人来说,关键是需要包含“using System.Linq;”名称空间。一旦执行此操作,就可以对对象执行“.where”查询。

OP特别要求使用LINQ“.ForEach()”方法,该方法不能用于ObservableCollection,因为它只针对List实现


还有另一个SO主题,我在这里找到了解决方案:

您可能需要我的库。这是一个.NET API,专门设计用于在WPF和其他.NET UI框架中处理类似LINQ的查询,以实现ObservableCollection,这些框架支持绑定到和对象(Xamarin、Blazor)。

谢谢。很抱歉我记得有些查询有问题,但现在我已经尝试过了,一切都正常了。结果查询是一个IEnumerable。有没有一种干净的方法可以返回到一个可观察的集合?@toog:这需要一个数据的副本-当原始可观察的集合发生变化时,它不会改变,这是我所期望的。不过我可能误解了。@ToaoG:如果你要过滤它,这样你就不会真正观察到原始数据中的任何变化,那么使用ObservableCollection对你有什么好处?你会观察到什么变化?@ToaoG:你没有回答我的问题:如果你不能观察到任何变化,为什么还要麻烦使用ObservableCollection?(因为这是数据的副本。)谢谢你的补充回答!这就是我的问题:)如果查询结果由于底层源被更新而更新,则生成的ObservableCollection将不会更新。