我是MVVM(和一些WPF)的新手,在過去的幾天裏我已經閱讀了許多代碼項目文章,博文和Stackoverflow問題。我有這樣的印象:數據綁定對從數據源(數據庫)加載數據後顯示數據非常好,並且保持模型與視圖同步,並更新視圖中模型數據的所有其他外觀。驗證和保存WPF MVVM中的數據如何正常工作?
但我仍然沒有真正知道如何節省,而驗證之前,應該工作的權利。我有一個強大的Windows窗體和ADO.NET背景。我非常熟悉編碼數據庫訪問層和視圖更新。那時候,您只有臨時的臨時數據,正在編輯,只有在視圖中,以及模型類和數據庫中最後保存的數據版本。模型類通常與數據庫同步。這是包含尚未保存的數據的觀點。
你也有一個保存按鈕,將來自控制讀取的所有數據,在代碼驗證它,要麼接受,並將其保存到模型和數據庫,或者不更新模型,並顯示一條錯誤消息。如果發生錯誤,用戶輸入仍留在用戶界面中供用戶修改。但是沒有其他應用程序可以看到它。而且你有一個取消按鈕,它只會丟棄包含編輯控件的視圖的那一部分 - 該模型仍然有效並保持不變。
使用數據綁定和的ViewModels剛剛從模型類,什麼是在文本框中輸入暴露數據現在立即進入模型,是它正確與否。 IDataErrorInfo只不過是 - 信息性的。您可以將其視爲或忽略它。唯一實施的嚴格驗證是類型轉換:永遠不能將非數字字符串更新爲數字模型字段。但就是這樣。我將通過讓ViewModel執行所有驗證並從屬性設置器中拋出對無效數據的異常來解決這個問題。這是實現已知行爲的唯一方法。
但哪裏保存和數據的丟棄去?我什麼時候會將數據寫回數據庫? TextBox的每個離開都會導致數據庫寫入,因此我不再需要顯式的Save命令(並且只能通過撤消來恢復)?我何時會驗證整個數據記錄?我將如何處理模型和數據庫不同步,無效輸入立即傳播整個應用程序和所有視圖感謝數據綁定?何時以及如何使用「取消」按鈕放棄任何用戶輸入,保持模型不變 - 或者在編輯器對話框打開之前將其恢復到狀態?
我覺得MVVM不提供這些基本問題的解決方案。我只是想念他們還是他們真的不存在?如果MVVM不是這個的解決方案,那麼是什麼?或者MVVM最好不要用於WPF中的數據編輯應用程序?
嘗試交叉張貼到http://programmers.stackexchange.com/您的問題(關於軟件開發概念性問題) – Surfbutler 2012-07-06 13:17:54