Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 将数据从隔离存储检索到viewmodel中_Windows Phone 7_Mvvm_Observablecollection_Isolatedstorage_Databound - Fatal编程技术网

Windows phone 7 将数据从隔离存储检索到viewmodel中

Windows phone 7 将数据从隔离存储检索到viewmodel中,windows-phone-7,mvvm,observablecollection,isolatedstorage,databound,Windows Phone 7,Mvvm,Observablecollection,Isolatedstorage,Databound,我在这里有严重的精神障碍,需要一些帮助。我使用Windows Phone数据绑定应用程序作为项目的起点,并且对模型、视图模型和视图的交互方式相当满意 我的问题是,示例中使用的数据是在运行时创建的,并添加到ObservableCollection对象中。我的理解是,创建新的ItemViewModel对象并随后将其添加到ObservableCollection会触发NotifyPropertyChanged事件的等价物,从而确保视图上的绑定全部刷新。如果我的解释不正确,那么我欢迎任何想法 现在,运行

我在这里有严重的精神障碍,需要一些帮助。我使用Windows Phone数据绑定应用程序作为项目的起点,并且对模型、视图模型和视图的交互方式相当满意

我的问题是,示例中使用的数据是在运行时创建的,并添加到ObservableCollection对象中。我的理解是,创建新的ItemViewModel对象并随后将其添加到ObservableCollection会触发NotifyPropertyChanged事件的等价物,从而确保视图上的绑定全部刷新。如果我的解释不正确,那么我欢迎任何想法

现在,运行时生成的数据在大多数实际示例中都是无用的,因此我需要将数据序列化到隔离存储中。我已经这样做了,并且可以成功地保存和加载我的ObservableCollection对象

当我从IsolatedStorage加载数据,然后将返回的ObservableCollection分配给视图模型中的Items对象时,问题就出现了

    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");
        }
    }