使用ReactiveUI 7调用Command参数

Nie*_*ink 8 c# reactiveui

我正在切换到最新版本的ReactiveUI(7.0),我遇到了一些不兼容问题,并想知道建议的方法来处理这个问题:

ReactiveUI 6.x

Texts.Events().MouseUp
     .InvokeCommand(ViewModel, x => x.DoSomething);
Run Code Online (Sandbox Code Playgroud)

现在抛出异常:

Command需要System.Reactive.Unit类型的参数,但接收的类型为System.Windows.Input.MouseButtonEventArgs的参数.

我通过使用以下代码修复此问题,但这是正确的方法吗?

Texts.Events().MouseUp
     .Select(x => Unit.Default)
     .InvokeCommand(ViewModel, x => x.DoSomething);
Run Code Online (Sandbox Code Playgroud)

Nie*_*ink 2

预期命令的参数是 Unit,这意味着没有输入参数的命令,在 ReactiveUI 的情况下是 ReactiveCommand。这就是为什么在上面的示例中,您必须将 MouseButtonEventArgs 从事件“转换”为单位。为此,我创建了一个辅助扩展方法 ToSignal:

public static IObservable<Unit> ToSignal<TDontCare>(this IObservable<TDontCare> source) 
    => source.Select(_ => Unit.Default);

\\ The subscription will be then
Texts.Events().MouseUp
     .ToSignal()
     .InvokeCommand(ViewModel, x => x.DoSomething);
Run Code Online (Sandbox Code Playgroud)