かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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への委譲
    });

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