C# 如何确定;canExecute“;从带有ReactiveUI的CommandParameter?

C# 如何确定;canExecute“;从带有ReactiveUI的CommandParameter?,c#,reactiveui,C#,Reactiveui,我可以创建这样一个命令,该命令检查我的视图模型的某些属性(如果可以执行): AddNewSectionCommand = ReactiveCommand .CreateFromTask(() => AddNewSectionAsync(NewSectionTitle), this.WhenAny(x => x.NewSectionTitle, x => !string.IsNullOrWhiteSpace(x.Value)));

我可以创建这样一个命令,该命令检查我的视图模型的某些属性(如果可以执行):

AddNewSectionCommand = ReactiveCommand
    .CreateFromTask(() => AddNewSectionAsync(NewSectionTitle),
                    this.WhenAny(x => x.NewSectionTitle, x => !string.IsNullOrWhiteSpace(x.Value)));

是否也可以对通过WPF传入的
CommandParameter
执行此操作,如果可以,如何执行?因为有时我直接想使用UI中的某些内容作为命令的参数,但也希望在执行之前检查有效性。到目前为止,我必须通过将值绑定到视图模型属性来实现这一点,并使用上面的方法,这会使视图模型中充斥着大量多余的内容。

不,canExecute没有CommandParameter。vm属性路由是一条必由之路。所有ReactiveUI“getting started”类型的示例都始终使用此方法(例如用户名/密码),这很有意义,因为vm应该负责确定可执行性。其中一个主要原因是单元测试要容易得多。因此,我觉得添加到虚拟机中的额外属性非常值得,一点也不多余。

对于视图模型来说,它只能控制哪些可以执行,哪些不能执行,这绝对是有意义的。在过去,我混合使用视图模型和代码来实现小型、不太复杂的自包含用户控件(如文本框和按钮,其中按钮打开文件选择器并相应填充文本框),现在,我将使用视图模型来处理所有问题。通常,允许执行命令的决定应该基于模型/视图模型可用数据。例如,您倾向于无论如何绑定所选项,以便查看模型数据。您不会经常在视图相关的数据上使用它。因此,从这个角度来看,将其作为参数不可用是有意义的。我有一个日历视图,有4个按钮,移动月份,移动年份,允许在指定的日期范围内来回移动。我将所有按钮绑定到同一个命令,分别传递-1、-12、12和1个月数。命令参数是按钮内联的常量值。是否有一种方法可以设置可以使用RxUI执行,以便它检查新计算的日期是否超过允许的日期标准?这是否意味着我别无选择,只能创建4个不同的命令?我遇到了一个类似的问题,最终出现了多个命令,每个命令对应一个按钮。我所做的是创建一些“虚拟函数”,它们都调用相同的中心函数。像DoThis(“new”)、DoThis(“edit”)、DoThis(“whatever”)和最终的函数DoThis(string doWhat)。我真的很怀念基于CommandParameter定义“canExecute”函数的可能性。