如何将ValueWhenConverter与枚举一起使用?
例如:
<Grid Visibility="{x:Bind ViewModel.ViewModelStatus, Mode=OneWay, Converter={StaticResource ViewStatusConverter}}">
..
</Grid>
<converters:ValueWhenConverter x:Key="ViewStatusConverter">
<converters:ValueWhenConverter.When>
<vm:ViewModelStates>Error</vm:ViewModelStates>
</converters:ValueWhenConverter.When>
<converters:ValueWhenConverter.Value>
<Visibility>Visible</Visibility>
</converters:ValueWhenConverter.Value>
<converters:ValueWhenConverter.Otherwise>
<Visibility>Collapsed</Visibility>
</converters:ValueWhenConverter.Otherwise>
</converters:ValueWhenConverter>
我认为这种语法不正确:<vm:ViewModelStates>Error</vm:ViewModelStates>
如何将ValueWhenConverter映射到我的枚举值?
答案 0 :(得分:0)
不幸的是,当OfValueConverter无法映射到枚举时,我尝试使用它:
<converter:ValueWhenConverter x:Key="EnumSexToBooleanConverter">
<converter:ValueWhenConverter.When>
<vm:RegisterPageViewModel>
<vm:RegisterPageViewModel.PersonalInfo>
<model:Personal>
<model:Personal.Sex>
0
</model:Personal.Sex>
</model:Personal>
</vm:RegisterPageViewModel.PersonalInfo>
</vm:RegisterPageViewModel>
</converter:ValueWhenConverter.When>
<converter:ValueWhenConverter.Value>
<ToggleSwitch>
<ToggleSwitch.IsOn>
<x:Boolean>True</x:Boolean>
</ToggleSwitch.IsOn>
</ToggleSwitch>
</converter:ValueWhenConverter.Value>
<converter:ValueWhenConverter.Otherwise>
<ToggleSwitch>
<ToggleSwitch.IsOn>
<x:Boolean>False</x:Boolean>
</ToggleSwitch.IsOn>
</ToggleSwitch>
</converter:ValueWhenConverter.Otherwise>
</converter:ValueWhenConverter>
并抛出一个InvalidCast异常,它在使用值类型时是一个很好的转换器,例如x:Boolean,x:Int32,x:Double和x:String,它也有一些枚举值集成在xaml中,如可见性使用Visible和Collapsed等枚举的属性。
就我现在的尝试而言,我甚至尝试了许多不同的方式,没有办法使用带枚举的WhenValueConverter。
如果您需要从布尔值转换为枚举,反之亦然,我建议您使用IValueConverter创建自己的转换器。
这将是您实际问题的最佳选择。
此外,如果您希望能够将WhenValueConverter映射到枚举值,可以通过将viewmodel属性更改为依赖属性来实现,如下所示:
public Gender Sex
{
get { return (Gender)GetValue(SexProperty); }
set { SetValue(SexProperty, value); }
}
public static readonly DependencyProperty SexProperty =
DependencyProperty.Register(
nameof(Sex), typeof(Gender),
typeof([YourContainerType]),
new PropertyMetadata([initial_default_or_null_here])
);
}
public enum Gender : int
{
Female,
Male
}
这只是一个例子,来自Template 10 github项目的这个示例dg2k的作者。 Template 10 - WhenValueConverter to Enum Values