はじめに
オレオレ解釈の覚え書き その5
トリガーアクションについてです。
※今回も Expression Blend に付属する Trigger, Action について触れていきます。
本文
トリガーは動作のきっかけを通知する機構で、トリガーが何かを感知したときに行われる処理がアクションです。これらはセットで使用されるため、まとめてトリガーアクションと呼ばれています。
トリガーにはいくつか種類があります。ここではコントロールのイベント発生を感知する EventTrigger を使ってみます。以下の例では、メッセージボックスを表示するアクションを用意し、ウィンドウがロードされたときに起動するように紐づけています。
namespace TestApp.Views.Behaviors
{
public class MessageAction : TriggerAction<DependencyObject>
{
protected override void Invoke(object parameter)
{
var owner = this.AssociatedObject as Window ?? Window.GetWindow(this.AssociatedObject);
MessageBox.Show(owner, "メッセージ", "タイトル", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
}
<Window x:Class="TestApp.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:behaviors="clr-namespace:TestApp.Views.Behaviors">
<!-- トリガーとアクションを設定できる -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<behaviors:MessageAction/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Window>
この例のような動作はビヘイビアでも実現できるでしょう。両者の違いは、同じ処理をさせるか、同じふるまいをさせるかにあります。アクションは処理だけが切り出されており、特定のイベントに依存しません。イベントの感知はトリガーに任せています。一方でビヘイビアは処理のきっかけとなるイベントまで丸ごと部品化されています。
おわりに
今回はトリガーアクションについてでした。
数回に分けてまとめてきた View を支える要素ですが、少し掘り下げただけでも、この構成の奥深さが垣間見えてきます。これらの仕組みを活用することで、処理どうしの癒着が減り、再利用しやすいプログラムの構築に近づくはずです。
View は一区切りにして、次回は ViewModel の相互作用処理についてまとめてみます。今回のテーマであるトリガーアクションにも関係がある仕組みになります。