2015-05-04 22 views
2

我的同事和我想創建一個包含一些頁面的應用程序,允許用戶更改某些設置。這些設置頁面沒有保存按鈕。有一個主要的設置頁面和兩個子設置頁面。如果用戶從三個頁面中的一個導航回來或者用戶在其中一個子頁面上進行了一些更改,則該設置應該保持不變。 該模型在主設置頁面的OnAppearing()方法中加載。因此,我們不能使用子頁面的OnDisappearing()方法來保存模型,因爲這些方法的順序以及導航頁面的Pushed()和Popped()在每個平臺上都有所不同:forums.xamarin.com/discussion/21417/navigationpage推送流行事件序列不同跨平臺Xamarin.Forms如何將模型保存到數據庫而無需保存按鈕,最佳實踐

我們現在的解決方案是將模型保存在子頁面視圖模型屬性的setter中。但這不可能是最佳做法。所以我們的問題是:是否有其他解決方案來解決這個問題?這個問題的最佳實踐是什麼?

代碼:

public ReminderRepetitive ListViewSelectedItem 
    { 
     get { return _settingsEntity.ReminderRepetitive; } 
     set 
     { 
      if (!Equals(_settingsEntity.ReminderRepetitive, value)) 
      { 
       _settingsEntity.ReminderRepetitive = value; 
       OnPropertyChanged("ListViewSelectedItem"); 
       Save(); 
       _navigation.PopAsync(); 
      } 
     } 
    } 


public void Save() 
    { 
     _businessLayer.UpdateSettings(_settingsEntity); 
    } 

回答

1

有對你的代碼進行改進。

你不應該從一個屬性做導航 - 如果你要導航,至少做一個方法。該方法應該是async,你應該await_navigation.PopAsync()

即使調用Save()不應該在那裏。考慮如果在保存時發生異常會發生什麼情況:重複鍵,空字段等都是可能的。那麼不僅你不會Save,但你不會PopAsync要麼你ListViewSelectedItem = newItem將導致你選擇的物品處理程序也炸燬。如果你打算擁有一個也可以處理顯示錯誤消息的屬性,那麼你絕對可以在MessyCode領土內完成。

您可以在您的模型(ReminderRepetitive)上使用PropertyChanged,並在屬性更改後立即保存。

它看起來像你有一個_businessLayer保存或更新的整個業務可能屬於那裏。

整體而言,您的問題非常廣泛,可以視爲「基於意見」。下次嘗試詢問您不確定或導致錯誤的代碼的特定部分 - 或使用Code Review

相關問題