3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

View を支えるトリガーアクション

Posted at

はじめに

オレオレ解釈の覚え書き その5

トリガーアクションについてです。
※今回も Expression Blend に付属する Trigger, Action について触れていきます。

本文

トリガーは動作のきっかけを通知する機構で、トリガーが何かを感知したときに行われる処理がアクションです。これらはセットで使用されるため、まとめてトリガーアクションと呼ばれています。
トリガーにはいくつか種類があります。ここではコントロールのイベント発生を感知する EventTrigger を使ってみます。以下の例では、メッセージボックスを表示するアクションを用意し、ウィンドウがロードされたときに起動するように紐づけています。

TriggerAction
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);
        }
    }
}
View
<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 の相互作用処理についてまとめてみます。今回のテーマであるトリガーアクションにも関係がある仕組みになります。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?