Caliburn是Rob Eisenberg在2009年提出的一个开源框架,可以应用于WPF,Silverlight,WP7等,框架基于MVVM模式,像它的名字一样,是企业级应用的一把利器。而Caliburn.Micro是Caliburn项目的精简版,重构了Caliburn的代码,精简掉了一些不常用的功能。
public class HelloViewModel : PropertyChangedBase {
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));
}
private string name;
}
另外,这个类继承于PropertyChangedBase, 这是Caliburn Micro提供的,用于自动属性更改通知,所以我们不需要实现INotifyPropertyChanged。
<Window.Resources>
<Style TargetType="TextBox">
<Setter Property="MinWidth" Value="200" />
<Setter Property="Margin" Value="10" />
<Setter Property="Padding" Value="4,2" />
<Setter Property="FontSize" Value="24" />
</Style>
<Style TargetType="Button">
<Setter Property="Margin" Value="10" />
<Setter Property="Padding" Value="20,0" />
</Style>
</Window.Resources>
<DockPanel>
<Button x:Name="SayHello" DockPanel.Dock="Right" Content="Say Hello" />
<TextBox x:Name="Name" />
</DockPanel>
说明:
public class HelloBootstrapper : BootstrapperBase {
public HelloBootstrapper() {
Initialize();
}
protected override void OnStartup(object sender, StartupEventArgs e) {
DisplayRootViewFor<HelloViewModel>();
}
}
OnStartup()函数的DisplayRootViewFor<>()函数设置你想要在启动时使用的视图模型。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:HelloBootstrapper x:Key="bootstrapper"></local:HelloBootstrapper>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>