Binding WP7在ObservableCollection中插入所有linq结果
我使用linq解析来自Web服务的xml结果: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
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可以很好地工作。