はじめに
オレオレ解釈の覚書 その13
Livet に用意された相互作用処理のため実装である Messanger についてまとめます。
本文
前回の最後に紹介させて頂きましたが、Livet は Prism と同じく MVVM フレームワークの一つです。
Livet には Messanger と呼ばれる機構が用意されており、View を直接参照することなく ViewModel から相互作用処理を依頼することができます。
Prism 7.2 で廃止されてしまった InteractionRequest の代替としてこちらを利用してみます。
Messanger と InteractionRequest とでは実装方法が異なります。Messanger はインスタンス自体は一つで、ViewModel から通知を行う際に指定する MessageKey によって処理の違いを表現します。View は Messanger をバインドして MessageKey の値を指定することで、通知をハンドルし相互作用処理を実行します。
ViewModel
usingLivet.Messaging;namespaceTestApp.ViewModels{publicclassMainWindowViewModel{publicInteractionMessengerMessanger{get;}publicMainWindowviewModel(){this.Messenger=newInteractionMessenger();}publicvoidShowMessage(){this.Messenger.Raise(newInteractionMessage("ShowMessage"));}}}View
<Windowx:Class="TestApp.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:i="http://schemas.microsoft.com/xaml/behaviors"xmlns:p="http://prismlibrary.com/"xmlns:behaviors="clr-namespace:TestApp.Views.Behaviors"p:ViewModelLocator.AutoWireViewModel="True"><i:Interaction.Triggers><l:InteractionMessageTriggerMessageKey="ShowMessage"Messenger="{Binding Messenger, Mode=OneWay}"><behaviors:MessageAction/></l:InteractionMessageTrigger></i:Interaction.Triggers></Window>おわりに
Livet の Messager についてのお話でした。
InteractionRequest と比較すると、Messanger はインスタンス数を抑えられるため実装がスッキリしています。一方で MessageKey を文字列で指定する必要があり、この辺りは好みが分かれるかもしれません。
非常に汎用性の高い仕組みであり、Prism と併用することで MVVM パータンによる開発を強力にサポートしてくれるはずです。