Binding WP7在ObservableCollection中插入所有linq结果

Binding WP7在ObservableCollection中插入所有linq结果,binding,silverlight-3.0,windows-phone-7,Binding,Silverlight 3.0,Windows Phone 7,我使用linq解析来自Web服务的xml结果: XElement items = XElement.Parse(e.Result); MyListBox.ItemsSource = from item in items.Descendants("node") select new MyViewModel { ... }; 这会自动填充我的列表框。但问题是,我通常像这样访问我的Observabl

我使用linq解析来自Web服务的xml结果:

XElement items = XElement.Parse(e.Result);
MyListBox.ItemsSource = from item in items.Descendants("node")
            select new MyViewModel
            {
               ...
            };
这会自动填充我的列表框。但问题是,我通常像这样访问我的ObservableCollection:

App.MyViewModel.MyItems;
在我的xaml中有:

ItemsSource="{Binding MyItems,}"
如何直接修改我的ObservableCollection?我读 并尝试了以下方法:

var v = from item in items.Descendants("node")
            select new MyViewModel
            {
               ...
            };
OApp.MyViewModel.MyItems = new ObservableCollection<MyViewModel>(v);
var v=来自items.substands(“节点”)中的项
选择新的MyViewModel
{
...
};
OApp.MyViewModel.MyItems=新的ObservableCollection(v);
但是我不能,因为WP7(Silverlight3)中有这个,并且没有这样的构造函数


谢谢

您尝试使用的构造函数在Silverlight中,只是在手机上不可用。(根据)


不幸的是,您必须自己填充ObservableCollection。

您需要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);
        }
    }
}
公共静态类扩展
{
//扩展ObservableCollection类
公共静态void AddRange(此System.Collections.ObjectModel.ObservableCollection o,T[]项)
{
foreach(项目中的var项目)
{
o、 增加(项目);
}
}
}

我刚刚发明了一种静态方法,如下所示:-

public static ObservableCollection<T> CreateObservableCollect<T>(IEnumerable<T> range)
{
    var result = new ObservableCollection<T>();
    foreach (T item in range)
    {
        result.Add(item);
    }
    return result;
}
公共静态ObservableCollection CreateObservableCollect(IEnumerable范围)
{
var结果=新的ObservableCollection();
foreach(范围内的T项)
{
结果.添加(项目);
}
返回结果;
}
现在,您的最后一行代码变成:-

 OApp.MyViewModel.MyItems = new CreateObservableCollection<MyViewModel>(v);   
OApp.MyViewModel.MyItems=newcreateObservableCollection(v);
注意(如果您不知道):如果您只是显示项目(没有添加/删除),则不需要使用ObservableCollection。一个IEnumerable可以很好地工作。