2013-10-09 71 views
0

這個問題似乎很容易,但我沒有找到這個問題的答案。Windows Phone:刷新綁定列表框「手動」

我有我的項目清單工作完美,綁定到我的MVVM。當我更新元素時​​,一切都很協調,變化反映出來等等。

其中一個字段根據當天計算。因此,如果用戶按HOME並退出應用程序,並且明天他回來,則列表不刷新,它顯示前一天的數據。

要解決這個問題,我在使用中認爲OnNavigatedToOnNavigatedFrom事件,節省了「高考」一天的開始,並將其與當前日在OnNavigatedTo事件(恢復應用程序時觸發)進行比較。發現這一天的變化,我可以刷新列表的明確性。

問題是,我如何刷新列表?或者,也許我正在使事情變得複雜一點,還有更好的方法來做到這一點。

編輯:最終的解決方案。

對於那些誰需要相同的功能,這裏是我找到了解決辦法:

// Declare this var in the MainPage class 
    // Holds the starting app day. If when going back to this page it has changed, refresh the list 
    private DateTime loadDate; 

    // Save the current day. If when going back to here it has changed, refresh the list 
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     loadDate = DateTime.Today; 
    } 

    // Read the current day and compare with saved. If when going back to here it has changed, refresh the list 
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     // Read the current day and compare 
     if (loadDate != DateTime.Today) 
     { 
      // The day has changed. Loop the list to refresh every item 
      foreach (Item item in listBoxControl.Items) 
      { 
       item.CalculateMyOwnFieldNotBindedToDB(); 
      } 
     } 
    } 
+0

你能否詳細說明爲什麼上述不起作用?你可以提供一些代碼嗎?這是在堆棧溢出發佈時的標準 –

+1

您的虛擬機是否實現INotifyPropertyChanged? 引發此接口定義的PropertyChanged事件通常用於在MVVM中'刷新'綁定。 – Dmitry

+0

只要確保你在UI線程中提高它。 – Dmitry

回答

0

問題是,如果你養在列表屬性更改而不實際更改列表,將實際忽略,因爲視圖將檢測到List對象實際上沒有改變。一種解決方法可能是將列表設置爲空,然後將其設置回原始列表。
另一種解決方案是循環遍歷列表中的項目,並在日期字段中引發屬性更改,就像這樣,它不會要求整個列表僅刷新實際屬性。

+0

嗯,所以這個問題並不像我預期的那麼微不足道。你是對的,提出虛假的財產變更將無所作爲,因爲沒有任何變化。我會明天嘗試你說的解決方法,關於設置爲空並重新設置爲原始。我仍然感到驚訝的是,在設計整個框架時沒有人想到這一點。一些簡單的事情,比如刷新「當你想要」。 – Eagle

+0

終於我解決了它與您的第3個選項:遍歷列表並重新計算字段,這引發了通知和刷新用戶界面。第一個(沒有任何改變的情況下提高通知)和第二個(將ListBox.ItemSource設置爲null並將其重新設置)解決方案不起作用。此外,我試圖完全重新加載VM中的ObservableCollection _allItems,再次查詢數據庫,但再次無法使用。謝謝你給我的觀點。 – Eagle