2017-04-22 67 views
1

如何将ValueWhenConverter与枚举一起使用?ValueWhenConverter和Enum

例如:

<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

不幸的是WhenValueConverter不能被映射到枚举,我尝试使用这样的:布尔,X:

<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时,它是一个很好的转换器的Int32 ,x:Double和x:String,还有一些枚举值集成在xaml中,如visible属性,该属性使用诸如Visible和Collapsed等枚举。

至于我现在尝试,我甚至尝试了很多不同的方式,没有办法使用带有枚举的WhenValueConverter。

如果您需要从布尔转换为枚举,反之亦然,我建议使用IValueConverter创建您自己的转换器。

这将是您的实际问题的最佳选择。

此外,如果你希望能够WhenValueConverter映射到枚举值可以通过更改您的视图模型属性依赖属性像这样实现:

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