かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

Windows 8.1のストアアプリのBehaviorでTriggerBehaviorを作る時の注意点

Actionsプロパティは依存プロパティとして実装しましょう。

何故?

依存プロパティとして実装しないと、ActionにBindingが出来なくなります。

Actionsが依存プロパティではなく、普通のプロパティの場合、以下のようにActionsの中のActionで{Binding}したときにDataContextが切れてnullが渡ってしまいます。

<Button Content="ClickEventTriggerBehvior and MainPageViewModelMessageDialogAction sample button" HorizontalAlignment="Left" Margin="120,176,0,0" Grid.Row="1" VerticalAlignment="Top">
    <Interactivity:Interaction.Behaviors>
        <Behaviors:ClickEventTriggerBehavior>
            <Behaviors:ClickEventTriggerBehavior.Actions>
                <Behaviors:MainPageViewModelMessageDialogAction TargetObject="{Binding}"/>
            </Behaviors:ClickEventTriggerBehavior.Actions>
        </Behaviors:ClickEventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</Button>

愚痴

以下のようなプロパティの実装がお手本としてあるから、添付プロパティにしなくてもいいじゃん?って思って普通のプロパティとして実装してしまいがちだけど、そうするとActionでBindingできなくて死ぬ。

public ActionCollection Actions
{
    get
    {
        var actions = (ActionCollection)GetValue(ActionsProperty);
        if (actions == null)
        {
            actions = new ActionCollection();
            this.SetValue(ActionsProperty, actions);
        }
        return actions;
    }
}

いまいち。