かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

PrismとReactivePropertyのつなぎ その2

ということで、前回さくっと書いたのですが普通に書くとどうなるか・・・?

// 普通
this.EditCommand
    .Subscribe(_ =>
    {
        var vm = new EditWindowViewModel(this.SelectedItem.Value);
        this.ShowEditWindowRequest.Raise(
            new Notification
            {
                Title = vm.EditTargetViewModel.Value.Name.Value + " Editing",
                Content = vm
            },
            n =>
            {
                // ここにいろいろ処理をかく
            });
    });
// 前回のコード
this.EditCommand
    // 選択項目から編集画面用のVM作って
    .Select(_ => new EditWindowViewModel(this.SelectedItem.Value))
    // InteractionRequest経由で編集画面を表示
    .SelectMany(vm =>
        // ShowEditWindowRequestはInteractionRequest<Notification>型のプロパティ
        // XAML側でウィンドウを表示するTriggerActionと紐づけてるイメージ
        this.ShowEditWindowRequest.RaiseAsObservable(
            new Notification
            {
                Title = vm.EditTargetViewModel.Value.Name.Value + " Editing",
                Content = vm
            }))
    .Subscribe(n =>
    {
        var vm = n.Content as EditWindowViewModel;
        // 結果を受けて何なりと処理をやる
        // 主にModelへの委譲
    });

うん、自己満足な気がしてきた。でも、処理を書き出す時点でのネストの深さが深くなるからコールバックはやっぱきらいかも。