Prism 5.0 包含很多新東西,新的快速入門示例,新的范例,更新的文檔,Prism類庫代碼的改變。用來解決已有問題,回應社區所提的需求。(這句話跟 What's New in Prism Library 4.0中的第一句話一模一樣,就不能來的新鮮的嗎?)
注意:在Silverlight中還得用Prism 4.1.
新指南
Prism5.0包含以下新指南:
- Prism.Mvvm是一個跨平台的類庫,它封裝了Prism對MVVM模式的支持。類庫中包含ViewModelLocationProvider。視圖和視圖模型使用了ViewModelLocationProvider中的一個基於轉換的方法進行連接,這在 實現MVVM模式 中有介紹。 視圖模型可以使用依賴注入容器構造。視圖模型定位器的可擴展性會在 擴展Prism介紹。DelegateCommands 現在可以支持異步。還添加一個全新 INotifyPropertyChanged 接口和 BindabaleBase 類。
- PopupWindowAction 類被添加在Prism.Interactivity 程序集中。用來響應打開一個自定義窗口的交互操作。更多信息可看 進擊的MVVM.
- EventAggregator 類轉到Prism.PubSubEvents 這個跨平台的類庫中了。
- NavigationParameters 類可以在導航期間傳遞一組object類型的參數。你將在Region 或RegionManager 實例中的方法RequestNavigate 的一個重載中使用到。
Library Prism庫的改變
Prism5.0庫的改變包括增加了新功能,代碼組織方式,和APIs.
代碼組織
下面是庫中代碼的一些變化:
- Microsoft.Practices.Prism.PubSubEvents 跨平台類庫包含PubSubEvents, EventAggregator 和一些相關的類。
- Microsoft.Practices.Prism.Mvvm 跨平台類庫包含s ViewModelLocationProvider, BindableBase, ErrorsContainer, PropertySupport, CompositeCommand, DelegateCommand, DelegateCommandBase, and WeakEventHandlerManager。
- Microsoft.Practices.Prism.Mvvm.Desktop 程序集包含ViewModelLocator 附加屬性。
- EventAggregator 類被標記為過時。
- Silverlight和phone的版本被移除了。如果你想用,還得看Prism4.1。
- Prism和Prism.Mvvm 是彼此獨立的單共享了IActiveAware ,因此IActiveAware 已經移到Prism.SharedInterfaces.
在Prism5.0這個版本中,發布/訂閱事件功能移到了一個單獨的程序集(Prism.PubSubEvents)。 DelegateCommand, CompositeCommand, 和ViewModel 的支持移動到(Prism.Mvvm)。這樣的分離很有好處。
- 你可以可選擇的使用Prism的功能。如果你想要區域和模塊化,你可以使用核心Prism程序集。如果你想用ViewModel 和命令支持,你可以使用Prism.Mvvm. 如果你只想使用 發布/訂閱事件,使用Prism.PubSubEvents。每個程序集都更小更易理解了。
- 你可以在跨平台類庫中構建你的Viewodel ,其中你還可以使用Prism.Mvvm 和 Prism.PubSubEvents ,以為這倆也是跨平台的庫。把你的ViewModel 代碼放到PCL(跨平台類庫)里,你的ViewModel 就需要依賴那種平台無關的程序集,以便你的代碼可以針對多種平台。
- 更新這些小的程序集更加簡單快速了。
API的改變
Prism類庫API有一些關鍵領域的改變。bootstrapper 有重大變化,一些重用代碼被添加以支持Prism新功能。
MVVM和事件聚合的改變。
移動ViewModel 和EventAggregator 到PCL(跨平台類庫)引起了一些改變。改變如下:
- 在 Prism.Mvvm中的BindableBase 類替代NotifcationObject 。NotificationObject 和 NotificationObject 類在Prism程序集中被標記為過時。
- 當你的類繼承自BindableBase 類,可用使用SetProperty 方法更新屬性的支持字段並引起相應屬性改變事件。一個新的OnPropertyChanged 方法可用以lambda表達式作為參數。
- 使用在 Microsoft.Practices.PubSubEvents 跨平台類庫的PubSubEvents 類替代CompositePresentationEvents。在事件解決方案文件夾中的類已經被標記為過時。
- UriQuery 類重命名為NavigationParameters,它保存了一些之前相同的功能,添加了object類型參數的傳遞。
- DelegateCommand 包含異步處理支持,並且被移動到Prism.Mvvm 跨平台類庫。DelegateCommand 和CompositeCommand 都使用了theWeakEventHandlerManager 來觸發CanExecuteChanged 事件。WeakEventHandlerManager 必須被第一個構造在UI線程上以便可以獲得UI線程的SynchronizationContext 屬性引用。
- EventAggregator 現在必須構建在UI線程,這樣才能獲取SynchronizationContext 屬性引用。
- WeakEventHandlerManager 現在變為public。
- 在DelegateCommand 的 Execute 和 CanExecute 方法現在被標記為virtual 。
Prism中被添加的核心API
一些命名空間是新被添加的,為了支持新功能:
- Microsoft.Practices.Prism.PubSubEvents 幫助你發送松耦合的消息,是使用一個跨平台的類。
- Microsoft.Practices.Prism.Mvvm 幫你使用MVVM模式。是使用一個跨平台的類和一些平台相關的程序集。
- Microsoft.Practices.Prism.SharedInterfaces 添加了 Prism 和Prism.Mvvm 共享的IActiveAware 接口。因此IActiveAware 接口已經從Prism 核心庫中移除了。
CodePlex上問題的解決
- 8532: InteractionRequestTrigger 可以引起一些導致內存泄露的實現。
- 9153: 'Notification'應該是個接口
- 9438: 導航到一個存在的視圖。
- 5495: 命令事件
- 8101: DelegateCommand 不可擴展
- 5623: 讓WeakEventHandlerManager 公開。
- 9906: 當使用XAML模塊目錄的一個bug。
- 7215: 使用 MEF Bootstrapper中ModuleCatalog.CreateFromXaml的問題。
- 8703: RegionManager::IsInDesignMode.
- 4349: 默認的區域行為順序問題。
- 3552:區域管理器不識別費WPF程序。
示例代碼的改變
Prism5.0包含了11個單獨的代碼示例,展示不同的功能。一些Prism4.1的示例被替換或是移除,新的示例被添加。
被添加到Prism5.0的新示例:
- 基礎 MVVM 快速入門.此示例展示了一個非常簡單的使用ViewModel 定位器的MVVM應用程序。並指示了一個嵌套ViewModels 。更多信息,請看MVVM快速入門。
- MVVM 快速入門 .此示例已經從此版本移除。
- MVVM 參考實現. 此示例已經從此版本移除。
- 視圖切換導航快速入門 . 此示例現在支持WPF。它描述了怎樣使用Prsim區域導航API。更多信息,請看 視圖切換導航快速入門.
- 基於狀態導航快速入門 . 此示例現在支持WPF。它站了一個使用視圖狀態管理者的方法去定義視圖狀態並允許切換。更多信息,請看 基於狀態導航快速入門。
- 組合式UI快速入門 . 此示例現在支持WPF。它替換了在Prism2.0中的視圖注入快速入門和視圖發現快速入門。當前版本下,視圖發現和視圖注入在同一個例子程序中體現。更多信息,請看 組合式UI快速入門.
- 交互快速入門. 這是個新的快速入門,展示了怎樣暴露一個視圖上的交互請求到視圖模型上。當彈窗需要一個自定義視圖模型時,此交互可以是一個彈窗,確認窗,自定義彈窗,或是一個更復雜的情況。它也展示了Prism的InvokeCommandAction 動作,可以從觸發器傳遞一個作為命令參數的EventArgs 。更多信息,請看 交互快速入門。
目前可用的NuGet包
在你的應用程序,你可以使用NuGet添加Prism程序集的引用。包里包括:
- Prism
- Prism.Composition
- Prism.Interactivity
- Prism.Mvvm
- Prism.PubSubEvents
- Prism.UnityExtensions
- Prism.MEFExtensions
注意 |
---|
Prism NuGet包將下載 Prism.Composition, Prism.Interactivity, Prism.Mvvm, and Prism.PubSubEvents包。你也可以單獨添加Prism.Interactivity, Prism.Mvvm, 和Prism.PubSubEvents 引用。 |
更多信息
如果你想了解從Prism4.1升級到Prism5.0。請看從Prism 4.1升級.