我想将枚举值作为命令参数传递。
我的枚举定义为:
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
and MyEnum.Two
到 MyEnum 类型。那么我怎样才能说服它MyEnum.One
and MyEnum.Two
are of MyEnum
type?
谢谢,
巴氏
MvvmCross 无法从绑定语句中猜测枚举的类型 - 因此它无法执行此绑定。
最简单的方法可能是使用以下方法解决此问题string
s 相反 - 然后你将需要使用Enum.Parse
从字符串到 ViewModel 中的枚举。
另一种方法是,您还可以实现一个枚举解析 ValueConverter,它只解析字符串 - 例如你可以基于https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/ValueConverters/MvxCommandParameterValueConverter.cs 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()));
}
}
然后,您可以使用嵌套进行绑定 - 使用类似以下内容:
local:MvxBind="Click MyEnumCommand(MyCommand, 'Two')"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)