2011-04-14 88 views
2

在我的WPF應用程序中,我使用的是MVVM。我正在讀取一個XML文件,將其反序列化爲一個對象模型並將其保存在內存中。在MVVM和WPF中設計模型和狀態管理

XML文件 - > BusinessObjectModel(型號) - >視圖模型

每當視圖模型需要模型我將提供其從memory.My問題是當我使用的模型元素在視圖中它被更新所述模型在內存中(顯然!)。我不想這樣做,我只希望在用戶在視圖(或對話框)中單擊確定時更新模型。通常如何實現?我應該只提供viewmodel模型的克隆而不是原始參考?

回答

4

正如您所建議的那樣,編輯模型對象的克隆將解決該問題。

另一種方法是讓屬性綁定使用Explicit的UpdateSourceTrigger。點擊保存後,您可以編程調用每個綁定表達式上的UpdateSource。這需要一些額外的代碼,這些代碼將屬於視圖的代碼隱藏,因爲它是操縱UI元素的代碼。

另請考慮在虛擬機中爲視圖中顯示的每個屬性設置屬性,其中VM屬性的後臺字段爲而不是包裝的模型對象的相應屬性。當用戶單擊保存時,您可以將每個屬性從VM分配給Model對象。自然,View中的控件將綁定到VM屬性,而不是Model屬性。這實際上就像擁有一個克隆一樣,沒有在模型層中支持克隆的額外行李。

我並不是說這些選項中的任何一個都更好或更差。這完全取決於它們的使用環境。

+0

太好了,我會爲第三個建議(在虛擬機中有一個不屬於模型的屬性),因爲這聽起來是最簡單的。謝謝! – Jimmy 2011-04-14 17:05:57