Caliburn.Micro Part 1: Getting Started をやってみる。
Mindscape Blog » Blog Archive » Caliburn Micro Part 1: Getting Started manbou404.hatenablog.com
要は、Cariburn.Microを使ったソリューションの作り方
※一番簡単なのは、NuGetからCariburn.Micro.Startを使うこと!!!
Step 1: Getting Started
Step 2: The View Model
- プロジェクトに、ShellViewModel.csを追加する。
- 原文ではAppViewModelだが、ここではShellViewModelにしている。
// <ShellViewModel.cs> using Caliburn.Micro; namespace Tutorial { public class ShellViewModel : PropertyChangedBase { } }
Step 3: The View
<!--ShellView.xaml> <UserControl x:Class="Tutorial.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Background="LightBlue"> <Grid> </Grid> </UserControl>
Step 4: The Bootstrapper
- プロジェクトにAppBootstrapperクラスを追加
これはチュートリアルの通りにならない。オブジェクトブラウザで見ても、Bootstrapper<>は存在しない。
どこかのバージョンから、必ずコンテナを内蔵しなくてはならないようだ。
とりあえず、以下のようにしておく
// <AppBootstrapper.cs> using Caliburn.Micro; namespace Tutorial { // public class AppBootstrapper : Bootstrapper<AppViewModel> <-- ビルドできない public class AppBootstrapper : BootstrapperBase { } }
<!--App.xaml> <Application x:Class="Example.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:local="clr-namespace:Tutorial" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary> <local:AppBootstrapper x:Key="bootstrapper" /> </ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
Step 5: 今のバージョンに合うように改造する
(といってもCariburn.Micro.Startの通りにするだけ)
ビルドでエラーが出ないことを確認しておく。実行しても、なにも起きないけど。。。
- プロジェクトにIShell.csを追加
// <IShell.cs> namespace Tutorial { interface IShell { } }
- ShellViewModel.csにIShellを追加
// <ShellViewModel.cs> using Caliburn.Micro; namespace Tutorial { // ↓↓↓ public class ShellViewModel : PropertyChangedBase, IShell { } }
- AppBootstrapper.csの中身を実装
// <AppBootstrapper.cs> using System; using System.Collections.Generic; using Caliburn.Micro; namespace Tutorial { // public class AppBootstrapper : Bootstrapper<AppViewModel> <--ダメよ public class AppBootstrapper : BootstrapperBase { SimpleContainer container; public AppBootstrapper() { Initialize(); } protected override void Configure() { container = new SimpleContainer(); container.Singleton<IWindowManager, WindowManager>(); container.Singleton<IEventAggregator, EventAggregator>(); container.PerRequest<IShell, ShellViewModel>(); } protected override object GetInstance(Type service, string key) { var instance = container.GetInstance(service, key); if (instance != null) return instance; throw new InvalidOperationException("Could not locate any instances."); } protected override IEnumerable<object> GetAllInstances(Type service) { return container.GetAllInstances(service); } protected override void BuildUp(object instance) { container.BuildUp(instance); } protected override void OnStartup(object sender, System.Windows.StartupEventArgs e) { DisplayRootViewFor<IShell>(); } } }
実行してみる
ん~~!?なんか小さいぞ??Cariburn.Micro.Startを入れたプロジェクトを見て、ShellViewを同じにしてみる
<!--ShellView.xaml--> <UserControl x:Class="Tutorial.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <Grid> <TextBlock Text="Hello Caliburn Micro!" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" /> </Grid> </UserControl>
やっぱり小さい・・・
>
サイズを指定してみる
<UserControl x:Class="Tutorial.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300" Background="LightBlue">
そうそう、こうなって欲しかった
サイズ未指定の時の挙動がCariburn.Micro.Startと違うのが気になるが・・・