关于MvvmCross文档中MvxCommand代码示例编译错误的修正疑问
问题解答:MvxCommand编译错误的修复方案
你完全正确,这个示例确实应该修改为泛型版本的MvxCommand<string>来解决编译错误,下面详细解释原因:
错误原因分析
非泛型的MvxCommand构造函数默认接受的是无参数的Action委托,也就是不需要传入任何参数的方法。而原代码中的lambda表达式day => DoAction(day)是一个带参数的委托(接受一个string类型的参数),这就和非泛型MvxCommand期望的委托类型不匹配,所以编译器会抛出“Delegate 'Action' does not take 1 arguments”的错误。
正确的写法
要支持带参数的命令,必须使用MvvmCross提供的泛型版本MvxCommand<T>,其中T是你要传递的参数类型。如果你的DoAction方法接受的是string类型的参数,那么正确的代码应该是:
new MvxCommand<string>(day => DoAction(day));
如果DoAction的参数类型不是string(比如是DateTime或者自定义类型),只需要把泛型参数替换成对应的类型即可,比如:
// 假设DoAction接受DateTime类型参数 new MvxCommand<DateTime>(selectedDay => DoAction(selectedDay));
额外说明
泛型MvxCommand<T>的设计就是为了处理需要传递参数的命令场景,它内部会绑定Action<T>委托,完美匹配带单个参数的方法或lambda表达式。
内容的提问来源于stack exchange,提问作者M. Feldman
相关产品推荐
相关产品推荐

