2016-07-13 13 views
0

Linq式の結果を使用してObservableCollectionを作成するにはどうすればよいですか?Linq式の結果を使用してObservableCollectionを作成するには

例:

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

コンテキストを保存する時に、上記のコードは動作しないので:Bに等しくないのはなぜ

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

?誰も助けることができますか?

bobs。 ctxはDBContextです

+0

ctx.itemsでこれを行うことができ、アイテムの変更に耳を傾け、そしてベースのリストに加えられた変更を反映したい場合は、これは、DBのコンテキストで意味はそれが正しいのですか?もしそうでなければ、ctxとは何ですか? –

+0

@JohnPeters、ctx.itemsはdbコンテキストです –

+0

ctx.items.Save()を使用するとどうなりますか? –

答えて

1

あなたは何が起こりたいのか分かりません。 aが1、bが0の場合は、共有しているコードから期待しています。

チェックのObservableCollectionのソースコードhttp://referencesource.microsoft.com/#System/compmod/system/collections/objectmodel/observablecollection.cs

で使用しているコンストラクタは、リストの内容をコピーしますので、項目のいずれかの更なる変化は、コンストラクタで使用されるリストには反映されませんか、この場合、 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

関連する問題