我想在Android视图中将特定的枚举值作为ConverterParameter传递。
我正在使用MvvmCross'MvxBind:
local:MvxBind="Visibility Person.Status,
Converter=EqualityToVisibility, ConverterParameter=PersonState.State1"
然而,传递给Converter的Convert方法的值是字符串“PersonState.State1”,而我想要枚举值。如何告诉MVVMCross传入枚举。 XAML标记具有x:static扩展,但我看不到Android布局的等效项
由于
答案 0 :(得分:0)
这不能使用标准值转换器和绑定语法来完成。正如@Cheesebaron在评论中指出的那样,这与CommandParameter案例类似 - 请参阅MVVCross: Pass an enum value as a CommandParameter for Android
为了达到你需要的效果,我认为最简单的方法是修改你的值转换器来获取和解析一个字符串。
另一种方法可能是实现第二个值转换器 - ParsePersonStateValueConverter
- 它只需要一个字符串输入并返回解析后的enum
值。然后,您可以使用绑定表达式中的等值转换器将其嵌套:
local:MvxBind="Visibility EqualityToVisibility(Person.Status, ParsePersonState('State1'))"
答案 1 :(得分:0)
但是我们当然可以将枚举作为转换器参数传递。它所需要的只是一个辅助类,一个XAML标记扩展:
[ContentProperty("Value")]
public sealed class MyEnumExtension : IMarkupExtension {
public MyEnum Value { get; set; }
public MyEnumExtension() {
Value = MyEnum.Default; // change to whatever is your default
}
public MyEnum.Extension(MyEnum value) {
Value = value;
}
public object ProvideValue(IServiceProvider serviceProvider) => Value;
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider) => ProvideValue(serviceProvider);
};
,在XAML中,只需将其与定义它的适当名称空间一起使用即可。
< ... {Binding ... ConverterParameter={local:MyEnum AnyMyEnumValue}}" ... />
使用扩展名的确切名称命名扩展类,并附加后缀Extension
很重要。
解析和转换将在编译时完成,该值使用严格的类型存储,并且可以直接在转换器中使用,而无需解析,只需转换为枚举即可:
(MyEnum)parameter