かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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;
    }
}

いまいち。