0

我在這裏有一個嚴重的心理障礙,並在離開需要一些幫助。我正在使用Windows Phone Databound應用程序作爲我的項目的起點,並對模型,視圖模型和視圖之間的交互方式感到滿意。從孤立的存儲檢索數據到viewmodel

我的問題是,該示例中使用的數據在運行時創建並添加到ObservableCollection對象。我的理解是,創建新的ItemViewModel對象並將它們添加到ObservableCollection中會引發Equavalent到NotifyPropertyChanged事件,這些事件可確保視圖上的綁定全部刷新。如果我的解釋不正確,那麼我會歡迎任何想法。

現在,在大多數現實世界的例子中,運行時數據的生成是無用的,因此我需要將數據序列化到獨立存儲。這我已經完成,並且可以成功保存並加載我的ObservableCollection對象。

當我從IsolatedStorage加載數據,然後將返回的ObservableCollection分配給視圖模型中的Items對象時,出現問題。

public void LoadData() 
    { 
     App.Measurements = Serialization.Read<measurements>(App.MEASUREMENTS); 
     this.IsDataLoaded = true; 
    } 

僅包含要在IsolatedStorage中使用的文件名的全局變量的App.MEASUREMENTS。

上述代碼檢索數據並將其分配給Items ObservableCollection,但UI未更新。如果我更換上面的代碼有:

public void LoadData() 
    { 
     foreach (measurement m in App.Measurements.WeightMeasurements) 
     { 
      this.Items.Add(m); 
     } 
     this.IsDataLoaded = true; 
    } 

和迭代throught檢索集合,然後在用戶界面上的一切更新正確添加新ItemViewModel集合項集合。

我的xaml具有正確的綁定,並且DataContext也被正確設置。

我試過用數種方法來解決這個問題,但我不能相信唯一的方法就是遍歷整個已加載的集合,並將其添加到Items集合中,只是一些事件會觸發!

任何想法最受歡迎。

Jason。

回答

0

到底它到底了。這與ObservableCollection的定義有關。開箱即用它看起來像這樣

public ObservableCollection<ItemViewModel> Items { get; private set; } 

然而,NotifyPropertyChanged只有當財產被定義爲這樣被炒魷魚:實現INotifyPropertyChanged的

private ObservableCollection<ItemViewModel> _items; 
    public ObservableCollection<ItemViewModel> Items 
    { 
     get 
     { 
      return _items; 
     } 
     private set 
     { 
      if(_items != value) 
       _items = value; 
      NotifyPropertyChanged("Items"); 
     } 
    } 

項目,但它時,項目目標是從來沒有得到所謂的被分配到。

現在一切正常,現在無需遍歷已加載的集合並將其添加到Items ObservableCollection。

+0

這是我的第一個問題和我的回答,你說你已經這麼做了 –

+0

@Matt我對你回答的解釋並沒有使我得出最終結論,儘管回想起你的問題包含了一個指向最終解決方案的指針,** Item **實例化的類實現了NPC的屬性,然而,現在我明顯知道,只有類的屬性實現NPC是不夠的,實現類(對象)的屬性還需要提高NPC事件以更新用戶界面。再次感謝我堅持這一點。 –

2

您是否在Items上實施INotifyPropertyChanged?

作爲一個ObservableCollection,它將在集合中的單個項目上處理調用INPC,當它們被更改時,但您仍然需要爲屬性本身處理此問題。

+0

我已經在Items類上實現了INotifyPropertyChanged,但是問題似乎是在反序列化集合被分配給Items集合時,ObservableCollection 不會觸發CollectionChanged事件。 –

+0

@Jason你能提供一個repro項目來證實這一點嗎? –

+0

我應該直接郵寄給你嗎?真的不希望它張貼在這裏!我是否使用您的網站上的電子郵件地址? –