2010-11-24 48 views
2

所有LINQ結果我使用LINQ解析從web服務的XML結果。但問題是,我經常訪問我的ObservableCollection這樣:WP7中插入一個ObservableCollection

App.MyViewModel.MyItems; 

有在我的XAML:

ItemsSource="{Binding MyItems,}" 

我怎麼能直接修改我的ObservableCollection?我讀Cast LINQ result to ObservableCollection 並試圖此:

var v = from item in items.Descendants("node") 
      select new MyViewModel 
      { 
       ... 
      }; 
OApp.MyViewModel.MyItems = new ObservableCollection<MyViewModel>(v); 

但我不能,因爲這在WP7(Silverlight 3中),並沒有構造這樣

謝謝!

+1

注意(如果您不知道):如果您只是顯示項目(不添加/刪除),則不需要使用ObservableCollection。一個IEnumerable將正常工作。 – 2010-11-24 22:23:33

回答

1

,我正發明一個像這樣的靜態方法: -

public static ObservableCollection<T> CreateObservableCollect<T>(IEnumerable<T> range) 
{ 
    var result = new ObservableCollection<T>(); 
    foreach (T item in range) 
    { 
     result.Add(item); 
    } 
    return result; 
} 

現在您的最後一行代碼變爲: -

OApp.MyViewModel.MyItems = new CreateObservableCollection<MyViewModel>(v); 
0

您嘗試使用的構造函數在Silverlight中,只是在手機上不可用。 (按照MSDN

不幸的是,你必須自己填充你的ObservableCollection。

0

你需要ObservableCollection嗎?你需要添加或刪除集合中的對象或只是更新?

如果只是更新,你可以改變MyViewModel.MyItems到:

public MyTypeOfCollection MyItems 
{ 
    get { return _myItems; } 
    set 
    { 
     _myItems = value; 
     OnNotifyPropertyChanged("MyItems");//invoke INotifyPropertyChanged.PropertyChanged 
    } 
} 

如果您需要添加或刪除組成,您可以您的收藏擴展到:

public static class Extend 
{ 
    // Extend ObservableCollection<T> Class 
    public static void AddRange(this System.Collections.ObjectModel.ObservableCollection o, T[] items) 
    { 
     foreach (var item in items) 
     { 
      o.Add(item); 
     } 
    } 
} 
相關問題