2009-11-20 99 views
17

我正在重寫基於Windows窗體的應用程序,我打算使用WPF。 該應用程序嚴重依賴拖放技術,在一個非常圖形化的環境中。通過將元素拖放到網格上,將它們移動,右鍵單擊設置屬性等,將所有這些內容都保存到數據庫中,從而使用「設計」報告等。同時通過繪製流程圖來控制程序流程,包括路由和製作,全部在表單上繪製,然後再保存到數據庫中。要MVVM或不要MVVM這是問題

MVVM是否適用於這種應用程序,或者我是否試圖在一個方孔中安裝一個圓釘。

您的想法是appriciated。

回答

24

我的意思是使用MVVM,但不是宗教上的。

我的意思是,在你的視圖中使用一個模型,但在需要時使用一些代碼(拖動&拖放,雙擊)。找到一個可以幫助你的發展的平衡點,而不會讓你感到瘋狂

+0

謝謝,我認爲混合物是有序的。儘量堅持使用MVVM原則命令,綁定和數據庫處理,但有一些代碼後面處理更復雜的用戶界面交互。 – Tim 2009-11-23 10:38:56

5

MVVM很適合WPF。你可以使用WPF和MVVM進行拖放嗎?你當然可以。嘗試搜索「WPF拖放行爲」

1

如果您正在尋找長期的應用程序主管和可測試性,確保您可以使用MVVM和WPF來完成這些工作。或者只是去與WPF。 MMVM初始學習曲線非常陡峭。

+0

謝謝,我認爲混合物是爲了。儘量堅持使用MVVM原則命令,綁定和數據庫處理,但有一些代碼後面處理更復雜的用戶界面交互。 – Tim 2009-11-23 10:38:03

3

有兩個真的很好的理由去與MVVM:

  1. 它可以幫助你產生業務邏輯 和數據訪問代碼,更 容易單元測試
  2. 用很少的額外的努力,所有 的UX應該很容易修改 Blend

正如幾個海報所述,任何與UX有關的事件都可以用代碼方式處理,後面,但您應該通過視圖模型公開和訪問(讀取和寫入)數據,以便在視圖中輕鬆綁定。

至於我在#2中提到的額外的努力,你可以很容易的靜態屬性添加到您的應用程序對象,以確定是否在應用程序運行與視圖在Blend被打開。如果View在Blend中打開,則利用模擬數據而不是進行數據訪問調用。這裏有一些示例代碼,用於檢查Blend是否打開視圖:

if (Application.Current == null || Application.Current.GetType() == typeof(Application)) 
{ 
    isInDesignMode = true; 
} 
else 
{ 
    isInDesignMode = false; 
} 

希望這會有所幫助。

+0

感謝您的回覆。我對Blend不熟悉。學習Blend,WPF和MVVM原則可能會有很大的學習曲線。 – Tim 2009-11-23 10:15:08

0

像MVVM這樣的模式是爲了讓生活更簡單。所以對於任何情況,如果你覺得模式讓你很難,可以隨意打破它或嘗試其他的東西。盲目追隨任何事情都無濟於事。但無論如何,MVVM也支持拖放等複雜的UI交互,我相信行爲可以幫助你做到這一點。在谷歌上搜索WPF拖動&拖放行爲,你可以找到很多教程和代碼來幫助你。