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も動作している。
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)から値を拾ってくれる!!