かずきのBlog@hatena

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

Windows 8.1用のPrism for Windows Runtime

最近ウォッチしてなかったので気づいてなかったのですが、Windows 8.1に対応したPrism for Windows Runtimeが出てたみたいです。

NuGetで入手可能。PubSubEventsのほうは、前からPCLだったのでWindows 8.1になっても特に機能に変わりはないみたいです。

最初から作るうえで一番簡単なのは、Visual Studio 2013用のプロジェクトテンプレートとかアイテムテンプレートを使うことなので、入れておくのが吉だと思います。

細かいところはおいおい見ていくとして、基本的にはWindows 8のころと変わってないみたいです。Flyoutとかが標準機能で入ってきたので、そこらへんはPrismで用意しなくてよくなったから消えてるくらいかな?

変わらないが故に嫌なところ

Prism for Windows Runtimeでページのテンプレートとか使って開発してる上では困らないのですが、今までPrism使ってないものにPrismを適用しようとするとページの基本クラスがVisualStateAwarePageに差し替えないといけなかったりして、地味にめんどくさいんですね。

ここらへんは、Windows 8のころのストアアプリのデフォルトのテンプレートがLayoutAwarePageを継承していたのが気に入らなかったものを、NavigationHelperクラスに委譲するかたちにして、ページの基本クラスはPageクラスにしてくれた点が、進歩した点だと思ってます。でも、なんかイマイチなんですけどね…。

基本クラスは出来るだけ縛られたくない…!!という思いから、さくっと作るだけ作ってみました。

PrismAdapter - Home

こういうとき、世界で一番使われてる言語が日本語だといいなと思うんです。書いてることに自信がない…。

使い方

普通のPageにNavigationHelperBehaviorとViewModelLocatorBehaviorをぽとっと落すと、そのページがVisualStateAwarePageを継承してViewModelLocator.AutoAwareViewModel="True"を設定したのと同じような動きをするようになります。

戻るボタンは、NavigationHelperBehaviorにGoBackCommandというプロパティがあるので、それとバインドすればOK。

<!-- pageにこんな風にビヘイビア追加して -->
<Interactivity:Interaction.Behaviors>
    <PrismAdapter:NavigationHelperBehavior x:Name="navigationHelper"/>
    <PrismAdapter:ViewModelLocatorBehavior />
</Interactivity:Interaction.Behaviors>

<!-- 戻るボタンにバインド -->
<Button 
    x:Name="backButton" 
    Margin="39,59,39,0" 
    Command="{Binding GoBackCommand, ElementName=navigationHelper}"
    Style="{StaticResource NavigationBackButtonNormalStyle}"
    VerticalAlignment="Top"
    AutomationProperties.Name="Back"
    AutomationProperties.AutomationId="BackButton"
    AutomationProperties.ItemType="Navigation Button"/>

あとはPrism for Windows Runtimeの使い方にあわせて使えばOKOK。ページの基本クラスも自分で好きに差し替えたかったら差し替えればいい感じになると思います。