nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Visual Studio and Development Technologies。なお掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Prism 6.3の変更点 その3 新規要素(for Xamarin.Forms)

本エントリーではPrism6.3で新たに追加された機能をいくつか紹介します。

EventToCommandBehavior

皆さん待望のEventToCommandBehaviorが追加されました。

あ、Prismとは別にXamarin.Forms用のBehaviorライブラリでいいのがあるんですよ。良かったらこちらもお試しください(ダイマ

www.nuits.jp

さてEventToCommandBehaviorは、コントロールから発生するイベントの内、対応するCommandのバインディングが用意されていない場合に利用します。
たとえば、ListViewのItemTappedイベントの場合はこんな感じで利用します。

<ListView ItemsSource="{Binding Fruits}">
    <ListView.Behaviors>
        <behaviors:EventToCommandBehavior
            EventName="ItemTapped"
            Command="{Binding SelectedFruitCommand}"/>
    </ListView.Behaviors>

タップされた時にSelectedFruitCommandが呼び出されます。
このコードではTapされたItemが何か分かりませんが、ItemTapped発生時のイベントオブジェクトではるItemTappedEventArgsのItemプロパティにはTapされたオブジェクトが設定されています。PrismのEventToCommandBehaviorでは良くあるIValueConverterで頑張る以外の方式として、発生したイベントのプロパティのパスを指定してCommandに渡すことができます。
かしこい!

こんな感じです。

<ListView ItemsSource="{Binding Fruits}">
    <ListView.Behaviors>
        <behaviors:EventToCommandBehavior
            EventName="ItemTapped"
            Command="{Binding SelectedFruitCommand}"
            EventArgsPropertyPath="Item"/>
    </ListView.Behaviors>

そしてこう受け取ります。

public ICommand SelectedFruitCommand => new Command<Fruit>(fruits =>
{
    ...
});

これ以外にも一般的な、CommandParameterやIValueConverter、ConverterParameterなどにも対応しています。
利用頻度の高いBehaviorですから、含まれるのはありがたいですね。

IApplicationLifeCycleの追加

PageやViewModelでIApplicationLifeCycleを実装することで、ApplicationのSleepとResumeのイベント通知を受信できるようになりました。
アプリケーションが非表示・表示された際に呼び出されますので、作業中の状態の保存や復元に利用できます。
ただ、AndroidとiOSで微妙に振る舞いが違うという話を聞いたことがあります。現在、どのように振舞うのか分かりませんので利用する際には調査した方が良いでしょう。

tamafuyou.hatenablog.com

IApplicationStore

DIコンテナからインジェクションさせることで、新たにIApplicationStoreが利用できるようになりました。
これはXamarin.FormsのApplicationクラスのPropertiesへのアクセスを容易にします。

https://developer.xamarin.com/api/property/Xamarin.Forms.Application.Properties/

インターフェースでインジェクションできるのでUnitTestがしやすくなる等の効果が期待できます。

IDeviceService

これもDIコンテナからインジェクションさせることで利用します。
Xamarin.FormsのDeviceクラスの利用を、インターフェースベースで利用できるようになる為、UnitTestが容易になるといった効果が期待できます。

以上でPrism6.3のXamarin.Forms関連のアップデートは全てになります。