在View中触发事件时,ViewModel上的ReactiveUI调用命令

时间:2015-09-21 03:34:06

标签: c# reactiveui

我正在使用Reactive UI事件扩展到Reactive UI。

只是在玩事件以连接到ViewModel。

最初我在我的View的构造函数中有

        this.Events().KeyDown.Select(x => x.Key).InvokeCommand(ViewModel.NewTextCommand);

但是,这在构造函数中存在视图模型尚不存在的问题。我考虑添加一个WhenAnyValue并设置Invoke但不确定这是否会导致内存泄漏。

目前我有

        this.Events().KeyDown.Select(x => x.Key).Subscribe(
            x =>
            {
                if (ViewModel != null)
                {
                    if (ViewModel.NewTextCommand.CanExecute(x))
                    {
                        ViewModel.NewTextCommand.Execute(x);
                    }
                }
            });

但这看起来有点笨拙。

1 个答案:

答案 0 :(得分:3)

您绝对可以使用WhenAnyValue,但ReactiveUI中还有一个内置的InvokeCommand overload来执行此操作:

this.Events().KeyDown.Select(x => x.Key).InvokeCommand(this, v => v.ViewModel.NewTextCommand);