漫坊亭

社会の底辺プログラマ

Caliburn Micro Part 3: More About Events and Parameters をやってみる。

Mindscape Blog » Blog Archive » Caliburn Micro Part 3: More About Events and Parameters manbou404.hatenablog.com

要は、Binding, Command(Execute,CanExecute)の正式な書き方。

以下は、前回のソリューションをつかう。

Long Syntax

名前空間を追加して、RepeatButtonを置き換える。

<!--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:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:cal="http://www.caliburnproject.org">
    <!-省略-->
    <!--<RepeatButton Name="IncrementCount" Content="Up" 
                      Margin="15" VerticalAlignment="Top" />-->
    <RepeatButton Content="Up" Margin="15" VerticalAlignment="Top">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <cal:ActionMessage MethodName="IncrementCount" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </RepeatButton>

変更前と同じように動くことを確認。

IncrementCountに引数を追加する。

// <ShellViewModel.cs>
        public void IncrementCount(int delta)
        {
            Count += delta;
        }

ActionMessageでパラメータに1をセット

<cal:ActionMessage MethodName="IncrementCount">
  <cal:Parameter Value="1" />
</cal:ActionMessage>

IncrementCountの引数deltaに、パラメータでセットした1が来る。

Short Syntax

1加算するボタンと、2加算するボタンと、値を倍にするボタンを追加する。

        <UniformGrid Columns="3" VerticalAlignment="Top">
            <RepeatButton Content="+1" Margin="15" 
                          cal:Message.Attach="[Event Click] = [Action IncrementCount(1)]" />
            <RepeatButton Content="+2" Margin="15" 
                          cal:Message.Attach="[Event Click] = [Action IncrementCount(2)]" />
            <RepeatButton Content="Double" Margin="15"
                          cal:Message.Attach="[Event Click] = [Action IncrementCount(Count.Text)]" />
        </UniformGrid> 

引数は、即値でも、参照でもOK。CanIncrementCountも動作している。

f:id:jfactory:20150625161902p:plain

Automatically Finding Parameters

今度は、加算する値をスライダーで指定する。

        <UniformGrid Columns="2" VerticalAlignment="Bottom">
            <Slider Name="Delta" Minimum="0" Maximum="5" Value="1" Margin="15" />
            <Button Name="IncrementCount" Content="Increment" Margin="15" />
        </UniformGrid>

IncrementCountメソッドの引数がdeltaなので、自動的にSlider(名前がDelta)から値を拾ってくれる!!

f:id:jfactory:20150625162400p:plain

ソース一式