こねたです。
こんなのを用意しておくと捗ります。
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("モデルのコードの呼び出し"); }); } }
割といいかも