Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

InteractionRequestをRxに合流させる

$
0
0

こねたです。

こんなのを用意しておくと捗ります。

using Microsoft.Practices.Prism.Interactivity.InteractionRequest;
using System;
using System.Reactive.Disposables;
using System.Reactive.Linq;

namespace WpfApplication7
{
    publicstaticclass InteractionRequestExtensions
    {
        publicstatic IObservable<T> RaiseAsObservable<T>(this InteractionRequest<T> self, T n)
            where T : INotification
        {
            return Observable.Create<T>(o =>
            {
                self.Raise(n, result => o.OnNext(result));
                return Disposable.Empty;
            });
        }

    }
}

例えば、RxCommandが実行されたら確認ダイアログが出てOKが押されたときのみ何かをするといった処理が以下のように書ける!

publicclass MainWindowViewModel
{
    public ReactiveCommand ConfirmCommand { get; private set; }

    public InteractionRequest<Confirmation> ConfirmRequest { get; private set; }

    public MainWindowViewModel()
    {
        this.ConfirmRequest = new InteractionRequest<Confirmation>();
        this.ConfirmCommand = new ReactiveCommand();

        this.ConfirmCommand
            .SelectMany(_ => this.ConfirmRequest.RaiseAsObservable(new Confirmation
            {
                Title = "確認",
                Content = "コンテンツ"
            }))
            .Where(c => c.Confirmed)
            .Subscribe(_ =>
            {
                Debug.WriteLine("モデルのコードの呼び出し");
            });
    }
}

割といいかも


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>