2017-04-22 46 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