嗯,我想我對MVVM有相當好的理解。但我需要一些澄清。MVVM,WPF和驗證
ViewModel是否負責調用相應的服務來保存模型信息?
如果是這樣,那麼ViewModel必須有一個乾淨的方式來確定它所保存的數據是否有效。如果數據有效,它將相應地更新模型。最後,在給定新更新的模型的情況下調用一個保存模型的服務。那麼問題是:我們如何驗證ViewModel的信息並在View中輕鬆顯示?
我見過幾種不同的驗證方法。一個建議使用IDataErrorInfo,我認爲這是絕對噁心的。
另一個是將ValidationRule添加到Binding.ValidationRules。但是,使用這種方法不能在整個模型的範圍內運作。 ValidationRule對象只能對單個值執行驗證。一個例子可能是確保一個值是一個整數或在一定範圍內。
我剛開始研究的另一個想法是使用BindingGroup的。但在這一點上,我對此一無所知,因爲我仍在閱讀。
我希望能夠在View和ViewModel使用的單個位置執行驗證邏輯。除了這個要求之外,我希望能夠對ViewModel中的任何其他值進行驗證。此外,如果ViewModel處於無效狀態,則可以阻止ViewModel保留數據。這需要很容易反映在視圖中。
如果有人能指點我的一些文章或提供一些洞察力,我希望我的方法,我會非常感激。
出於興趣,您爲什麼認爲IDataErrorInfo令人厭惡? – 2009-10-15 06:32:38
我認爲這是索引器的濫用開始。 ViewModel [「Name」]應該返回一個名稱... not null /「error!」。您也受限於您在視圖中綁定的屬性。它不會很好地適用於ValidateNameInformation等驗證器,它可以檢查涉及的所有字段。如果我在這些陳述中被誤解,請糾正我。 – Joe 2009-10-15 14:16:12
我周圍濫用索引器的一種方式是使用顯式接口實現。這樣我就沒有一個奇怪的「索引器」亂丟我的ViewModel公共接口。我仍在研究如何使用MVVM驗證多個字段。 – 2009-12-21 14:39:10