我正在切换到最新版本的ReactiveUI(7.0),我遇到了一些不兼容问题,想知道建议的方法来解决这个问题:
ReactiveUI 6.x
Texts.Events().MouseUp
.InvokeCommand(ViewModel, x => x.DoSomething);
现在抛出异常:
Command需要System.Reactive.Unit类型的参数,但接收的类型为System.Windows.Input.MouseButtonEventArgs的参数。
我使用以下代码解决了这个问题,但这是正确的方法吗?
Texts.Events().MouseUp
.Select(x => Unit.Default)
.InvokeCommand(ViewModel, x => x.DoSomething);
答案 0 :(得分:0)
命令期望的参数是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);