3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ViewModel と相互作用処理(Messanger)

Last updated at Posted at 2020-08-08

はじめに

オレオレ解釈の覚書 その13

Livet に用意された相互作用処理のため実装である Messanger についてまとめます。

本文

前回の最後に紹介させて頂きましたが、Livet は Prism と同じく MVVM フレームワークの一つです。
Livet には Messanger と呼ばれる機構が用意されており、View を直接参照することなく ViewModel から相互作用処理を依頼することができます。
Prism 7.2 で廃止されてしまった InteractionRequest の代替としてこちらを利用してみます。

Messanger と InteractionRequest とでは実装方法が異なります。Messanger はインスタンス自体は一つで、ViewModel から通知を行う際に指定する MessageKey によって処理の違いを表現します。View は Messanger をバインドして MessageKey の値を指定することで、通知をハンドルし相互作用処理を実行します。

InteractionRequest と比較すると、Messanger はインスタンス数を抑えられるため実装がスッキリしています。一方で MessageKey を文字列で指定する必要があり、この辺りは好みが分かれるかもしれません。

ViewModel
using Livet.Messaging;

namespace TestApp.ViewModels
{
    public class MainWindowViewModel
    {
        public InteractionMessenger Messanger { get; }

        public MainWindowviewModel()
        {
            this.Messenger = new InteractionMessenger();
        }

        public void ShowMessage()
        {
            this.Messenger.Raise(new InteractionMessage("ShowMessage"));
        }
    }
}
View
<Window x: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:InteractionMessageTrigger MessageKey="ShowMessage" Messenger="{Binding Messenger, Mode=OneWay}">
            <behaviors:MessageAction/>
        </l:InteractionMessageTrigger>
    </i:Interaction.Triggers>
</Window>

おわりに

Livet の Messager についてのお話でした。
InteractionRequest と同じく非常に汎用性の高い仕組みであり、MVVM パターンによる開発を強力にサポートしてくれるはずです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?