漫坊亭

社会の底辺プログラマ

(自分用翻訳) Caliburn Micro Part 3: More About Events and Parameters

原文へのリンク (google翻訳を使用しています)

Caliburn Micro Part 3: More About Events and Parameters

これまでのところ、このCaliburnMicroチュートリアルシリーズでは、WPFアプリケーションでCaliburnMicroを使用して、どのようにビューと一緒に結合し、イベントデータを使用してビュー·モデルをリンクするの開始方法を見てきました。今日のチュートリアルでは、イベントをフックしてイベントパラメータを指定する、より高度な方法を見ていきます。これらの機能を試すために、我々はさらに、前の2つのブログの記事で作成したアプリケーションを拡張することになります。

あなたは私たちがCaliburnMicroの命名規則の助けを使用してイベントをフックアップ前のブログ記事から覚えていることがあります。私たちが行うために必要なすべては、ビュー·モデル内のメソッドと同じ名前にするために、ビューのボタンの名前を設定しました。その後、ボタンのClickイベントは、自動的に適切なメソッドを呼び出すためにフックアップされます。時にはしかし、あなたが明示的にイベントパラメータを提供したり、正確にあなたが使用したいイベントを指定するために、イベントをフックする必要があります。これを行うには、CaliburnMicroは、長い構文と短い構文を提供します。長い構文の利点は、Microsoft Expression Blendのとの互換性です。デザイナを使用して興味がないと短いと甘いものを維持したい場合、短い構文が素晴らしいです。のは、長い構文を使用する方法を学習してから始めましょう。

Long Syntax

開始する最善の方法は、現在の動作を変更することなく、長い構文を使用するように既存のアプリケーションを変更することです。 AppView.xamlを開き、これらの2の名前空間が含まれます。

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"

そして、単にこれにリピートボタンを置き換えます。

<RepeatButton Content="Up" Margin="15" VerticalAlignment="Top">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <cal:ActionMessage MethodName="IncrementCount" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</RepeatButton>

これで、アプリケーションを実行し、あなたはそれが見える、それは以前と同じように動作しますが表示されます。私たちがここで行ったことはSystem.Windows.Interactivityはメソッドにイベントをフックするためにトリガーに使用されます。EventTriggerで我々は耳を傾けるしたいイベントを指定することができ、CaliburnMicro ActionMessageを使用して、我々が呼ばれるべき方法を指定することができます。この方法を使用すると、イベントの任意の数が同じ制御で他のイベントをリッスンするようにトリガーを含むことができます。だから、追加のアクションを実行するためのMouseEnterとMouseLeaveに耳を傾けることができます。

次のイベントのパラメータを見てみましょう。これを実証するために、我々は整数パラメータが含まれるようにIncrementCount方法を変更する必要がありAppViewModel.csでは2でカウントをインクリメントし、別のボタンを追加します。このパラメータは、Countプロパティを変更するために使用されます。 IncrementCount方法について、次のようになります。

public void IncrementCount(int delta)
{
  Count += delta;
}

戻るAppView.xamlで、このようなActionMessageにCaliburnMicroパラメータを追加することで、既存のリピートボタンを更新します。

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

ボタンが押されたときにここでは、IncrementCountメソッドにパラメータとして1の値を渡します。 2のパラメータを使用してアプリケーションに別のボタンを追加し、アプリケーションを実行します。別のボタンをクリックすると、それらの異なるパラメータに基づいてカウント値をインクリメントします。CaliburnMicroパラメータのValueプロパティには、それはまた、通常のWPFのデータバインディングをサポートしていることを意味依存関係プロパティです。これは、あなたが遭遇するさまざまなシナリオのすべての種類でそれを使用することができます。

プロヒント:そのためのパラメータ値を設定するためにデータバインディングを使用してのflexibityの、それはビュー·モデルにビューからUI要素を通過することが可能です。あなたはハードあなたはおそらくできる限りこれを行うことは避けるべきです!ビュー·モデル内のUI要素は、MVVMのarchetectureを破壊することができ、将来的には保守の問題を引き起こす可能性があります。

Short Syntax

今同じことを行うために、短い構文を使用する方法を学習します。これに見て、のはそれで我々の最近の長い構文実験をしていないアプリケーションの新しいコピーから始めてみましょう。再び我々は、現在の動作を変更せずにアプリケーションを変更することによって開始されます。今回はこれだけ新しいものとCaliburnMicro名前空間を追加し、リピートボタンを交換する必要があります。

<RepeatButton Content="Up" Margin="15" VerticalAlignment="Top"
              cal:Message.Attach="[Event Click] = [Action IncrementCount]" />

すべての私たちは、今回が、私たちが興味を持っているどのイベント指定するCaliburnMicroの添付プロパティ(Message.Attach)のいずれかを使用している行っている、とするメソッドを呼び出すこと。

次に、この短い構文を使用してイベントパラメータを見てください。私たちは、長い構文のためにしたのと同じ方法でIncrementCount方法を変更します。このようになりますMessage.Attachを使用してイベントパラメータを含みます:

cal:Message.Attach="[Event Click] = [Action IncrementCount(1)]"

イベントパラメータは、メソッド名の後の括弧内に書かれています。私はあなたが2によって値をインクリメントボタンを追加する方法を考え出すことができると確信しています。

短い構文があっても、データバインディングの特殊な形式をサポートしています。これを実証するために、のカウント値そのものによってカウントをインクリメントボタンを追加してみましょう。つまり、ボタンのカウント値を倍増こと。あなたは値がリピートボタンのコードは次のようになります100より高く行くように、以前のブログ記事で述べたCanIncrementCountイベントガードを削除することができます。

<RepeatButton Content="Double" Margin="15"
              cal:Message.Attach="[Event Click] = [Action IncrementCount(Count.Text)]" />

ここで私はCount.Textするパラメータを設定しています。これは、設定し現在値が表示されているテキストブロック(名前付きカウント)のTextプロパティに結合します。CaliburnMicroが自動的に我々は数値を取るメソッドに渡したい文字列値を変換することに注意してください。CaliburnMicroがここで提供する別のショートカットは、我々はプロパティを指定しない場合、それは自動的にユーザーコントロールの適切なプロパティを使用することです。上記の例では、私たちは、パラメータとして(「カウント」)テキストブロックの名前を書くことができるとカリバーンマイクロは、デフォルトではTextプロパティにバインドします。ここでは、アプリケーションは、これまでのようになります。 f:id:jfactory:20150621211619p:plain

Automatically Finding Parameters

このチュートリアルを終了することを私はCaliburnMicroがあっても、あなたが明示的に設定していないときに、自動的にパラメータをピックアップするための規則を持っていることを言及します。あなたが明示的にパラメータを指定しない場合、CaliburnMicroはメソッドsignitureでパラメータ名を見て、この名前(大文字小文字を区別)と一致するビュー内の任意のユーザーコントロールを見つけるしようとします。一致するユーザコントロールが見つかった場合、制御上の適切な特性パラメータを提供するために使用されます。ユーザーコントロールは、テキストブロックである場合、例えば、テキストのプロパティの値をパラメータとして使用されます。ここでも、CaliburnMicroは自動的にように必要に応じてint型に文字列を変換することができます。

より簡単に、この規則を理解するために、アプリケーションでこれを試してみることができます。アプリケーションにスライダーを追加し、「デルタ」と呼んでいます。次に、「IncrementCount」と呼ばれる別のボタンを追加します。以前のブログ記事で説明したように、ボタンは、それがクリックされたときに自動的にIncrementCountメソッドを呼び出すために起こっています。今回はしかし、メソッドは、パラメータがありますが、我々はボタンを使用する必要がどのような値が指定やりなさい。私たちが追加されたスライダーは、パラメータ(デルタ)と同じ名前であることに注意してください。したがってカリバーンマイクロは自動的にボタンがクリックされるたびにメソッドのパラメータとしてスライダーのValueプロパティを使用します。ここでは、これを行うに追加するために必要なすべてのコードです:

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

f:id:jfactory:20150621211901p:plain

Extra for Experts

ここで私だけCaliburnMicroイベントをフックするために提供するサポートのいくつかを紹介してきました。 intrestのいくつかの他の内容は次のとおりです。

  • Setting action targets
  • Special parameter values for data binding
  • Action bubbling
  • Action guards with parameters

あなたは、オンラインドキュメントからCaliburnMicroを使用してイベントをフックの詳細情報を見つけることができます。私はあなたがより良いアプリケーションの様々なイベントシナリオで使用するためのアプローチを選択できますドキュメントを通して読むことをお勧めします。あなたは役に立つCaliburnMicroが提供するサポート、およびあなたの肩をオフ動作になります便利な規則の多くがたくさんあるでしょう。チートシートは、ブックマークに便利なページです。またHelloExplicitAction、HelloParametersとBubblingActionサンプルは知識の良い情報源であることがわかります。

ここから長い構文を実証するために使用され、このチュートリアル、そしてここから短い構文からアプリケーションをダウンロードすることができます。 次のイベントアグリゲータを見てみましょう。

次回まで、ハッピーコーディング!