2012-11-23 61 views
9

我正在創建一個應用程序,使用戶可以插入,更新和刪除已經輸入並顯示在數據網格中的數據(CRUD操作)。這是實現MVVM的正確方法嗎?

以我視圖模型,它包含鍵合到XAML(Firstname例如)屬性。它還包含導航屬性以及驗證屬性。

 [Required(ErrorMessage = "First Name is a required field")] 
     [RegularExpression(@"^[a-zA-Z''-'\s]{1,20}$", ErrorMessage = "First Name must  contain no more then 20 characters and contain no digits.")] 
     public string FirstName 
     { 
     get { return _FirstName; } 
     set 
     { 
      if (_FirstName == value) 
       return; 

      _FirstName = value; 
      OnPropertyChanged("FirstName"); 
     } 
    } 

此外,它包含用於xaml來執行,其產生的CRUD操作實例的命令;

private void UpdateFormExecute() 
    { 
     var org = new OrganisationTypeDetail(); 
     UpdateOrganisationTypeDetail(org); 
    } 

最後,它還包含CRUD操作。如插入,更新和刪除。

這導致我的問題。如果我想實現正確的MVVM方式,視圖模型所包含的所有代碼是否太多?

我應該使用的模型和我的視圖模型中創建一個集合的約束,且我xaml?這是否是正確的做法?

我應該使用Repository系統進行CRUD操作嗎?如果是這樣,我將如何將文本字段中的數據傳遞給模型以進行更新?

我是WPF,MVVM的新成員,如果沒有適當的指導,很難適應。

回答

3

我會說這是a正確的方式來實現MVVM,但不是正確的方式來實現MVVM。

我的意思是沒有一個正確的方式來實現這種模式。如果你已經創建了一個可以綁定到你的View的ViewModel,而沒有在你的View中有任何額外的邏輯(即代碼隱藏),那麼你已經捕獲了MVVM的本質。

您是否向代碼添加更多模式和結構完全取決於您。如果這是一個簡單的應用程序,我會保持模式輕。繼續,讓您的ViewModel直接與存儲庫對話。在這方面你目前的代碼對我來說看起來很好。

如果這是一個大型應用程序,您可能需要添加更多層,如服務層,數據訪問層。您可能想考慮依賴注入。

但是不只是採用一種模式,或只是因爲你認爲你應該添加一個額外的層。依賴注入聽起來很酷,但在許多情況下,它比它值得更麻煩!

+0

感謝您爲我解決問題,困惑是由於有很多不同的方式,我只是不知道要跟隨哪個!另外,「依賴注入」是什麼意思? –

+0

http://en.wikipedia.org/wiki/Dependency_injection – ColinE

0

對我來說這不是正確的方法,我認爲在視圖模型中定義像FirstName這樣的屬性並不是一個好主意。視圖應該只包含模型,視圖模型應該包裝應該綁定到XAML的模型(如果需要)。

模型對象的創建應該完全獨立於視圖模型。視圖模型應該只知道模型上的單元操作,驗證應該在模型內部,例如在你的情況下,名字驗證在ViewModel中意味着你只是限制GUI來驗證FirstName屬性,但如果有人從其他地方設置它,會怎樣。

+0

謝謝你。如果我想使用屬性驗證,那麼我會在那裏放置?在模型中?那麼從你說的話,將模型中的屬性直接綁定到視圖? –

+1

你能描述爲什麼它不是一個好主意嗎?爲什麼它不是'正確的'MVVM?盲目遵守關於如何實現一個模式的規則與根本不使用模式一樣糟糕! – ColinE

+0

@coline,因爲在解釋的例子中,FirstName似乎是一個模型的屬性,我認爲模型只能在視圖模型中。 –

相關問題