かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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。ページの基本クラスも自分で好きに差し替えたかったら差し替えればいい感じになると思います。