【发布时间】:2016-12-19 19:44:33
【问题描述】:
我正在切换到最新版本的 ReactiveUI (7.0),但遇到了一些不兼容问题,想知道处理此问题的建议方法:
ReactiveUI 6.x
Texts.Events().MouseUp
.InvokeCommand(ViewModel, x => x.DoSomething);
这会引发异常:
命令需要 System.Reactive.Unit 类型的参数,但接收到 System.Windows.Input.MouseButtonEventArgs 类型的参数。
我使用以下代码解决了这个问题,但这是正确的方法吗?
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); -
这很明显......谢谢。哦,另外,您应该发布自己问题的答案并接受它,而不是发表评论;)
标签: c# reactiveui