【问题标题】:How to create an ObservableCollection using LINQ in Silverlight如何在 Silverlight 中使用 LINQ 创建 ObservableCollection
【发布时间】:2010-04-22 15:37:59
【问题描述】:

在非 Silverlight 世界中,使用 LINQ 创建 ObservableCollection 很容易。这是因为 ObservableCollection 类具有接受任何 IEnumerable 或 List 的构造函数。但是,Silverlight 版本没有!这意味着代码如:

var list = (from item in e.Result
            select new ViewModel(item)).ToList();

Items = new System.Collections.ObjectModel.ObservableCollection<ViewModel>(list);

在 Silverlight 中不起作用。

除了诉诸 for-each 语句之外,还有其他选择吗?

【问题讨论】:

    标签: linq silverlight


    【解决方案1】:

    我不这么认为,但是您可以使用此扩展方法使其更清洁。

     public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll) {
            var c = new ObservableCollection<T>();
            foreach (var e in coll)
                c.Add(e);
            return c;
        }
    

    【讨论】:

    • 除非有其他选择,否则这是我将要使用的方法。我只是希望有另一种更优雅的方式来完成它。
    • @sonofpirate:在 SL3 中这是非常好的方法,即使在 SL4 中我也可能倾向于创建这种扩展方法(尽管在实现中使用了正确的构造函数)。
    【解决方案2】:

    好吧,如果您使用的是 Silverlight 4,那就可以了。 试试这个:

    public static class CollectionExtensions
        {
            public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll)
            {
                var c = new ObservableCollection<T>();
                foreach (var e in coll)
                    c.Add(e);
                return c;
            }
        }
    

    发现于:http://forums.silverlight.net/forums/p/39487/262505.aspx

    【讨论】:

    • 我不知道这个缺陷已经在 SL4 中得到解决,谢谢!
    • @sonofpirate:事实上,在 SL4 中,您可以删除 ToList,因为 ObservableCollection&lt;T&gt; 上有一个构造函数,它采用 IEnumerable&lt;T&gt;
    • 太棒了!我等不及我们获得升级到 SL4 的绿灯了!
    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多