很久(算起來快10年了吧!)都沒有在博客園更新內容了,近期在尋找MVVM框架時發現了這個:Antony Male開發的Stylet, 用起來感覺很好,不敢獨享,將其有關資料翻譯過來,大家共同學習。
Stylet的開源地址在這里:https://github1s.com/canton7/Stylet/,
下文的內容主要來源於項目的Readme文件(部分內容為機器翻譯,有生硬之處,敬請諒解)。
- 功能簡介
Stylet是一個小巧但功能強大的MVVM框架,靈感來自Caliburn.Micro。其目的是進一步降低復雜性和魔力(譯者注:Caliburn.Micro有很多讓人抓狂的約定,看起來像魔法,這對新手而言一點都不友好),讓不熟悉任何MVVM框架的人(同事)更快地跟上速度。
它還提供了Caliburn.Micro中不可用的功能,包括自己的IoC容器,簡單的ViewModel驗證,甚至是與MVVM兼容的MessageBox。
低LOC數量和非常全面的測試套件使其成為使用和驗證/驗證SOUP具有高開銷的項目的一個有吸引力的選擇,其模塊化工具包架構意味着它很容易使用你喜歡的部分,或者替換你不喜歡的部分。
下面顯示了一個簡短的功能列表。點擊右側的鏈接了解更多信息。
- 視圖模型優先的方法
經典的 MVVM 結構(視圖知道如何實例化其 ViewModel,而 ViewModel 通常不直接通信)稱為 View-first。但是,反轉此模式(自己實例化 ViewModels 並自動附加視圖)提供了許多優點,允許您以一種應該非常熟悉的方式編寫 ViewModels。這種 ViewModel 優先的方法是唯一受 Stylet 支持的方法。
- Action
WPF 使用的 ICommand 接口功能強大,但在 MVVM 體系結構中使用時很笨拙。ViewModel 為響應按鈕單擊等操作而執行的操作應表示為屬性而不是方法,這似乎不對。一個簡單的<Button Command="{s:Action DoSomething}"/>
會在每次單擊按鈕時調用 ViewModel下的DoSomething()方法。如果您有一個名為CanDoSomething的 bool 屬性,則將觀察該屬性並用於判斷是否應啟用或禁用該按鈕。
Action操作也適用於事件,允許您執行類似 <Button MouseEnter="{s:Action DoSomethingElse}"/>
這樣的語句。
- Screens and Conductors
Screen 類提供了許多功能,使它成為 ViewModels 的有吸引力的基類:PropertyChanged 通知、驗證、在顯示/隱藏/關閉時收到通知的功能,以及控制是否以及何時可以關閉它的功能。
- 事件聚合器
Stylet的事件聚合器與Caliburn.Micro非常相似,允許訂閱者接收來自發布的消息,而無需了解或保留另一個。這對於 ViewModels 之間的消息傳遞特別有用,盡管它還有很多其他用途。
- 窗口管理器
使用 ViewModel 優先方法,您可以通過引用要顯示的 ViewModel 來顯示窗口和對話框,並且視圖會自動附加。WindowManager允許輕松完成此操作。
還提供了與 MVVM 兼容的 MessageBox 實現,因此您不必自己再實現一遍。
- 驗證
傳統上,MVVM 中的驗證有點麻煩:它需要在每個需要驗證的 ViewModel 中加入相當數量的樣板(boilerplate),而有關如何很好地完成此操作的資源很少。
Stylet 附帶了一個框架,用於獲取您最喜歡的驗證庫(例如FluentValidation),並處理運行驗證並將結果報告給 View。
- StyletIoC
Stylet帶有自己的輕量級且速度極快(但仍然強大)的IoC容器,盡管如果您願意,可以輕松使用其他容器。
- MIT許可證
Stylet在MIT許可證下分發,該許可證允許您修改Stylet,並將其包含在商業項目中,(唯一的限制是您必須包含許可證的副本)。