繁体   English   中英

使ObservableCollection与Linq表达式的结果一起使用

[英]To make a ObservableCollection working with the results of an Linq expression

如何使ObservableCollection与Linq表达式的结果一起使用?

例如:

items = new ObservableCollection<Item>(ctx.Items.Local.OrderBy(i => i.Name));
items.Add(new Item { Name = "ITEM NAME" });

保存上下文时,以上代码不起作用,原因是:

var a items.Count; //a is 1
var b ctx.Items.Local.Count; //b is 0 --> Nothing added!!

为什么A不等于B? 有人可以帮忙吗?

观察 ctx是一个DBContext

我不确定您希望发生什么。 我希望从您共享的代码中得到a为1而b为0。

http://referencesource.microsoft.com/#System/compmod/system/collections/objectmodel/observablecollection.cs中检查ObservableCollection的源代码

您使用的构造函数将复制列表的内容,因此项目的任何进一步更改都不会反映在其构造函数或IEnumerable中使用的列表中。

public ObservableCollection(IEnumerable<T> collection)
{
    if (collection == null)
        throw new ArgumentNullException("collection");
    CopyFrom(collection);
}

private void CopyFrom(IEnumerable<T> collection)
{
    IList<T> items = Items;
    if (collection != null && items != null)
    {
        using (IEnumerator<T> enumerator = collection.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                items.Add(enumerator.Current);
            }
        }
    }
}

如果您想听项目更改,并在基本列表中反映更改,也许可以在items.CollectionChanged

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM