我想将枚举值作为命令参数传递。 我的枚举定义为:
public enum MyEnum
{
One,
Two
}
在我的 axml 中我有:
local:MvxBind="Click MyCommand, CommandParameter=MyEnum.One"
...
local:MvxBind="Click MyCommand, CommandParameter=MyEnum.Two"
MyCommand 在我的 ViewModel 中定义为
public IMvxCommand MyCommand
{
get { return new MvxCommand<MyEnum>(myfunction); }
}
private void myfunction(MyEnum p_enumParam)
{
switch (p_enumParam)
{
case MyEnum.One:
doSomething1();
break;
case MyEnum.Two:
doSomething2();
break;
}
}
当我运行它时,收到错误“System.InvalidCastException:无法从源类型转换为目标类型。”
显然,因为它无法将 MyEnum.One
和 MyEnum.Two
转换为 MyEnum 类型。那么我怎样才能说服它 MyEnum.One
和 MyEnum.Two
是 MyEnum
类型呢?
谢谢, 巴氏
最佳答案
MvvmCross 无法从绑定(bind)语句中猜测枚举类型 - 因此它无法执行此绑定(bind)。
最简单的方法可能是使用 string
来解决这个问题 - 然后您需要使用 Enum.Parse
从字符串到枚举中的枚举 View 模型。
另一种方法是,您还可以实现一个枚举解析 ValueConverter,它只解析字符串 - 例如你可以基于 https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/ValueConverters/MvxCommandParameterValueConverter.cs - 您可以添加 Enum.Parse
来创建:
public class MyEnumCommandValueConverter
: MvxValueConverter<ICommand, ICommand>
{
protected override ICommand Convert(ICommand value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new MvxWrappingCommand(value, Enum.Parse(typeof(MyEnum), parameter.ToString()));
}
}
然后您可以使用嵌套进行绑定(bind) - 使用如下内容:
local:MvxBind="Click MyEnumCommand(MyCommand, 'Two')"
关于android - MVV交叉: Pass an enum value as a CommandParameter for Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149547/