[Wpf] 我應該使用什麼框架MVVM?


Answers

我發現這篇文章非常有用http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/為了讓我為即將到來的用戶帶來

我更新了Cinch部分並為其功能添加了Silverlight支持

我為這個漫長的故事感到抱歉

共同特徵:

•ViewModelBase類(用於實現INotifyPropertyChanged接口)

•RelayCommand類,將UI命令鏈接到ViewModel的處理程序

•單元測試隨框架一起提供

肚帶

•作者:Sacha Barber

•Silverlight支持:否(Cinch版本2支持Silverlight)

•文檔:優秀,6篇發表在CodeProject上的文章

•託管:CodePlex

•許可證:代碼項目開放許可證

• 特徵:

  1. 附加的行為

  2. 使用IDataErrorInfo進行驗證

  3. 支持IEditableObject

  4. 弱事件創建和訂閱

  5. 使用弱事件的中介信息

  6. IOC / DI支持(使用Unity)

  7. 服務:事件記錄器,消息框,打開保存對話框,彈出

  8. 線程助手

  9. 支持菜單項

  10. 可關閉的viewmodels

  11. MVVM代碼生成器

MVVM輕工具包

•作者:Laurent Bugnion

•Silverlight支持:是的

•文檔:在Laurent的博客+其他開發者中也可以找到許多文章

•託管:CodePlex

•許可證:MIT許可證

• 特徵:

  1. MSI安裝程序

  2. VS項目和項目模板

  3. VS代碼片段

  4. 用於視圖間模型通信的Messenger系統

MVVM Helpers

•作者:馬克史密斯

•Silverlight支持:否

•文檔:關於Mark博客的一些文章

•託管:個人網站

•許可證:未定義

• 特徵:

  1. 附加的行為

  2. 使用標記擴展創建視​​圖模型

  3. 基於屬性的驗證

  4. IOC / DI使用ServiceProvider方法

  5. 可關閉的viewmodel

  6. 等待光標(使用新的WaitCursor(){//你的代碼在這裡})

MVVM基金會

•作者:喬希史密斯

•Silverlight支持:否

•文檔:關於Josh或Marlon Grech博客上的Messenger實施的文章

•託管:CodePlex

•許可證:MS-PL

• 特徵:

  1. 用於視圖間模型通信的Messenger系統

  2. PropertyChanged事件監視器

卡利

•作者:Rob Eisenberg

•Silverlight支持:是的

•文件:提供完整的在線文件

•託管:CodePlex codeplex.com/caliburn

•許可證:MIT許可證

• 特徵:

  1. 命令構建在Actions之上,因此共享許多相同的功能,包括多個輸入參數,過濾器和自動異步執行

  2. 處理UI生命週期問題的演示者,例如處理各種UI組件的激活,停用和關閉語義

  3. Caliburn應用程序是完全可測試的

  4. 各種實用工具,如後台任務管理器

  5. 支持各種UI模式(僅限MVVM)

  6. 依賴注入容器

縞瑪瑙

•作者:William e Kempf

•Silverlight支持:否

•文檔:CodePlex上提供的基本介紹

•託管:CodePlex

•許可證:未指定

• 特徵:

  1. ServiceLocator模式

  2. 使用自定義標記擴展名創建ViewModel

  3. UI相關的服務,如IDisplayMessage

•作者:Daniel Vaughan

•Silverlight支持:否

•文檔:關於CodeProject的2篇非常詳細的文章(第1部分和第2部分)

•託管:CodePlex

•許可:使用,複製,修改和/或分發和保留版權!

• 特徵:

  1. 模塊管理器用於在運行時啟用或禁用模塊

  2. 消息傳遞服務,用於使用相同的API從客戶端或服務器與用戶進行交互

  3. Command Service將WPF ICommands與僅在活動視圖或視圖模型實現接口時才變為活動狀態的內容接口相關聯

  4. 工具欄和菜單的區域適配器

  5. 客戶端 - 服務器日誌準備好即用即用

  6. 包括模塊,如Web瀏覽器,文本編輯器,輸出窗口等等

  7. 帶有臟文件指示的選項卡式界面(可跨模塊重複使用)

nRoute

•作者:Rishi

•Silverlight支持:是的

•文檔:作者博客上的許多文章(請參閱CodePlex項目主頁中的鏈接)

•託管:CodePlex

•許可證:MS-PL

• 特徵:

  1. 支持Blend3行為和触發器模型

  2. 資源定位器框架

  3. 查看服務:OpenFileDialog,ShowMessage ...

  4. 使用屬性將View和ViewModel映射在一起

Nito MVVM

•作者:沙瑪

•Silverlight支持:否

•文件:沒有

•託管:CodePlex

•許可證:未指定

• 特徵:

  1. ICommand接口的各種MVVM友好的實現

海洋

•作者:Karl Shifflet

•Silverlight支持:否

•文檔:可在Karl博客上找到的文章

•託管:個人網站

•許可證:未指定

• 特徵:

  1. 用VB.Net編寫

  2. 基於屬性的驗證

  3. viewmodel基類:relaycommand,closeableviewmodel ...

  4. SQL服務器數據訪問層

基本的MVVM框架

•作者:Lester Lobo

•Silverlight支持:否

•文檔:庫中提供的示例應用程序

•託管:CodePlex

•許可證:MS-PL

• 特徵:

  1. 委派Commands \ Keybinding

  2. VM之間的消息傳遞

  3. 將事件處理為帶有附加行為的命令

  4. 處理對話(和更多)作為服務

  5. VS代碼片段

GoodLight

•作者:Peter O'Hanlon•Silverlight支持:是的

•文檔:庫中提供的示例應用程序

•託管:CodePlex

•許可證:MS-PL

• 特徵:

  1. “工作區”管理(可關閉的文檔集)

  2. 皮膚支持

  3. VM之間的消息傳遞

Question

我正在開發一個MVVM模型的應用程序,但我已經達到了需要選擇使用哪個框架的程度。

可能的選項包括:

  • MVVM工具包
  • MVVM基金會
  • WPF應用程序框架(WAF)
  • 輕MVVM
  • 卡利
  • 肚帶
  • 棱鏡

根據你的經驗,哪個更好?




如果您想在WPF / MVVM應用程序框架之上尋找Extensibility(可以編寫加載項),那麼您可能對SoapBox Core 免責聲明感興趣:我寫了它 。 它是開源的,所以即使你不使用它,那裡可能會有一些好的想法給你。 它將MEF用於擴展性和IoC。




咩。 Mvvm並不需要整個框架來支持IMO。 如果你理解了這個概念,那麼從一個實現INotify的干淨的VM基類開始,直接從那裡開始是非常簡單的。




混合你自己!

我使用了PRISM的EventAggregator,MVVM基礎的ViewModelBase等等。 我還調整了RelayCommand(在某些地方調用了DelegateCommand)以接受其他數據,等等。

我不會只推荐一個框架本身。




還有Ideablade的Cocktail和DevForce框架




總而言之,通過我的應用程序,我達到了90%,而我使用的MVVM Toolkit的所有功能都是工廠函數,它為我提供了一個委託函數以便在Execute中啟動,為我建立一個命令。 我想我可以在幾個小時內切換到任何其他框架或者沒有框架。