Caliburn.Micro - Xaml made easy. html
web: https://github.com/Caliburn-Micro/Caliburn.Micro
document: http://caliburnmicro.com/documentation/
nuget: Install-Package Caliburn.Microgit
用於創建各個XAML平臺應用,如WPF,Silverlight,WP,支持MV*模式github
更多相關項目,請訪問代碼沉澱目錄web
重要提示:請注意項目的版本,以官方最新版本爲準。bootstrap
在以前很早的博文中,我大致上翻譯了一個系列的文章,只不過因爲CM框架更新太快,再加上一個主要緣由,本身翻譯文章太慢,一個一個單詞查,因此只翻譯了一大半,不過也足夠你們使用了。這一篇文章介紹的是V2和V3版本的稍微會新一些。不過新版本和舊版本主要用法差很少,請看下方的官方示範。app
1. 啓動Visual Studio,新建一個解決方案 「Caliburn.Micro.Hello」,使用nuget方式(推薦),或者手動引用dll的方式,添加CM框架的類庫和System.Windows.Interactivity.dll。
刪除「MainPage.xaml」,修改 「App.xaml.cs」 ,以下方所示:框架
namespace Caliburn.Micro.Hello { using System.Windows; public partial class App : Application { public App() { InitializeComponent(); } } }
2. CM框架更推薦使用View-Model-First方式,咱們也這麼幹,建立第一個VM,名叫「ShellViewModel」,代碼以下:mvvm
namespace Caliburn.Micro.Hello { using System.Windows; public class ShellViewModel : PropertyChangedBase { string name; public string Name { get { return name; } set { name = value; NotifyOfPropertyChange(() => Name); NotifyOfPropertyChange(() => CanSayHello); } } public bool CanSayHello { get { return !string.IsNullOrWhiteSpace(Name); } } public void SayHello() { MessageBox.Show(string.Format("Hello {0}!", Name)); //Don't do this in real life :) } } }
能夠看到,ShellViewModel 繼承自 PropertyChangedBase,這個基類簡單的定義了屬性通知,可實現簡單的通知界面更新功能。ide
3. 有了簡單的VM,下面咱們就定義一下 bootstrapper,創建一個新類「HelloBootstrapper」,代碼以下:this
namespace Caliburn.Micro.Hello { public class HelloBootstrapper : BootstrapperBase { public HelloBootstrapper() { Initialize(); } protected override void OnStartup(object sender, StartupEventArgs e) { DisplayRootViewFor<ShellViewModel>(); } } }
這個 Bootsrapper 經過調用一個方法,定義了一個 「頂級ViewModel」。在程序啓動時,CM框架在初始化時,就會加載這個頂級VM,並顯示這個VM對應的View。
Bootsrapper 在一些常見的mvvm框架中,能夠看作是配置入口,好比配置設置,配置注入容器,等等。
4. 下一步,咱們用 HelloBootstrapper 替換默認的程序啓動方式,修改 「App.xaml」,以下所示:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Caliburn.Micro.Hello" x:Class="Caliburn.Micro.Hello.App"> <Application.Resources> <local:HelloBootstrapper x:Key="bootstrapper" /> </Application.Resources> </Application>
WPF:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Caliburn.Micro.Hello" x:Class="Caliburn.Micro.Hello.App"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary> <local:HelloBootstrapper x:Key="bootstrapper" /> </ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
這裏,咱們爲 App 添加了一個資源,資源名爲「bootstrapper」,須要提醒的是,此處已經刪除了 「Application.StartupUri」 屬性的值,不須要經過默認方式啓動窗體,改成經過CM框架的bootstrapper方式啓動前面配置的那個 「頂級ViewModel」。
接下來,你能夠嘗試啓動你的程序,會看到界面中有以下字樣。
Caliburn.Micro.Hello.ShellView not found.
Caliburn.Micro 已經創建了一個 ShellViewModel,可是它還不知道如何顯示,因此,咱們須要一個對應的 View,接下來咱們建立一個用戶控件(User Control),名叫 「ShellView」,xaml代碼以下:
<UserControl x:Class="Caliburn.Micro.Hello.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel> <TextBox x:Name="Name" /> <Button x:Name="SayHello" Content="Click Me" /> </StackPanel> </UserControl>
再次啓動你的程序,此次你就能看到剛剛定義的UI界面了。
嘗試在TextBox內輸入文字,當Button可用時,點擊它,能夠看到彈出了一個消息窗。
CM框架定義了一套簡潔有效的 「命名約定」 功能,用於匹配 View 和 ViewModel 之間的聯繫。
其實,它就是獲取到指定 VM 的全名,並移除了 「Model」 部分,剩下的部分即是對應的 View 了。
好比,對 「MyApp.ViewModels.MyViewModel」 來講,就會獲得 「MyApp.Views.MyView」。
對比一下 View 和 ViewModel,能發現,View中有一個 TextBox 控件,【x:Name=」Name」】 部分,實現了綁定到ViewModel中的 「Name」 屬性。還能發現,View中有一個 Button 控件,【x:Name=」SayHello」】部分,實現了綁定到ViewModel中的 」SayHello」 方法。最後ViewModel中還有一個 「CanSayHello」 屬性,會關聯到方法 「SayHello」,綁定功能的可用性如讓對應的按鈕不可用。
這些功能,是VM的ActionMessage(綁定至方法)功能,和Conventions(約定)功能的體現。