Windows phone 7 将数据从隔离存储检索到viewmodel中
我在这里有严重的精神障碍,需要一些帮助。我使用Windows Phone数据绑定应用程序作为项目的起点,并且对模型、视图模型和视图的交互方式相当满意 我的问题是,示例中使用的数据是在运行时创建的,并添加到ObservableCollection对象中。我的理解是,创建新的ItemViewModel对象并随后将其添加到ObservableCollection会触发NotifyPropertyChanged事件的等价物,从而确保视图上的绑定全部刷新。如果我的解释不正确,那么我欢迎任何想法 现在,运行时生成的数据在大多数实际示例中都是无用的,因此我需要将数据序列化到隔离存储中。我已经这样做了,并且可以成功地保存和加载我的ObservableCollection对象 当我从IsolatedStorage加载数据,然后将返回的ObservableCollection分配给视图模型中的Items对象时,问题就出现了Windows phone 7 将数据从隔离存储检索到viewmodel中,windows-phone-7,mvvm,observablecollection,isolatedstorage,databound,Windows Phone 7,Mvvm,Observablecollection,Isolatedstorage,Databound,我在这里有严重的精神障碍,需要一些帮助。我使用Windows Phone数据绑定应用程序作为项目的起点,并且对模型、视图模型和视图的交互方式相当满意 我的问题是,示例中使用的数据是在运行时创建的,并添加到ObservableCollection对象中。我的理解是,创建新的ItemViewModel对象并随后将其添加到ObservableCollection会触发NotifyPropertyChanged事件的等价物,从而确保视图上的绑定全部刷新。如果我的解释不正确,那么我欢迎任何想法 现在,运行
public void LoadData()
{
App.Measurements = Serialization.Read<measurements>(App.MEASUREMENTS);
this.IsDataLoaded = true;
}
并遍历检索到的集合,向Items集合添加新的ItemViewModel集合,然后UI上的所有内容都会正确更新
我的xaml具有正确的绑定,并且DataContext也设置正确
我已经尝试了很多方法来解决这个问题,但我不相信唯一的方法就是迭代整个加载的集合,将其添加到Items集合中,只会触发一些事件
任何想法都欢迎
Jason.您是否在
项上实施InotifyProperty更改
作为一个ObservableCollection,当集合中的单个项目发生更改时,它将处理对这些项目的调用INPC,但您仍然需要为属性本身处理此问题。最后谈到了它的底部。这与可观测集合的定义有关。开箱即用,看起来像这样
public ObservableCollection<ItemViewModel> Items { get; private set; }
publicobservableCollection项{get;private set;}
但是,NotifyPropertyChanged仅在属性定义为以下内容时才会被激发:
private ObservableCollection<ItemViewModel> _items;
public ObservableCollection<ItemViewModel> Items
{
get
{
return _items;
}
private set
{
if(_items != value)
_items = value;
NotifyPropertyChanged("Items");
}
}
private observedcollection\u项目;
公共可观测收集项目
{
得到
{
退货(物品);;
}
专用设备
{
如果(_items!=值)
_项目=价值;
通知财产变更(“项目”);
}
}
INotifyPropertyChanged实现的项已更改,但在将项对象分配给时从未调用它
现在一切正常,无需迭代加载的集合并将其添加到Items ObservaleCollection。我已在Items类上实现INotifyPropertyChanged,但问题似乎是,当反序列化的集合获取时,ObservaleCollection不会触发CollectionChanged事件分配给Items集合。@Jason您能提供一个复制项目来确认这一点吗?我要直接通过电子邮件发送给您吗?我真的不想把它贴在这里!我可以使用您网站上的电子邮件地址吗?请告诉我发送到哪里。谢谢,Jason。创建一个项目,以最简单的方式重新创建您的问题,并在此处发布链接。我不能保证对你通过电子邮件发给我的东西做任何事。在这里发布意味着其他人可能能够提供答案,或者在找到解决方案时从中受益。这是我的第一个问题和答案。“你说你已经这么做了。@马特,我对你的回答的解释并没有让我得出最终结论,尽管回想起来,你的问题包含了指向最终解决方案的指针。从中实例化项的类的属性实现了NPC,但是,现在我很明显,仅让类的属性实现NPC是不够的,实现类(对象)的属性还需要引发NPC事件以更新UI。再次感谢你在这件事上一直支持我。
private ObservableCollection<ItemViewModel> _items;
public ObservableCollection<ItemViewModel> Items
{
get
{
return _items;
}
private set
{
if(_items != value)
_items = value;
NotifyPropertyChanged("Items");
}
}