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

ReactiveUI 6.x

Texts.Events().MouseUp
     .InvokeCommand(ViewModel, x => x.DoSomething);

现在,这将引发异常:



我通过使用以下代码修复了此问题,但这是正确的方法吗?
Texts.Events().MouseUp
     .Select(x => Unit.Default)
     .InvokeCommand(ViewModel, x => x.DoSomething);

最佳答案

该命令所期望的参数是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);

关于c# - ReactiveUI 7的InvokeCommand参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41229903/

10-11 00:59