【问题标题】:InvokeCommand arguments with ReactiveUI 7使用 ReactiveUI 7 的 InvokeCommand 参数
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多