2017-04-22 9 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をマッピングする方法を教えてください。このような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例外をスローし、それは良い変換である:列挙型にマップすることカントWhenValueConverter残念ながら、私はこれを使用してみました

答えて

0

ブールは、×:のInt32を、x:Double、x:String、xamlのようなenum値がVisibleやCollapsedなどのenumを使用するvisibilityプロパティに統合されています。

私が今しようとする限り、私は多くの異なる方法を試しても、列挙型でWhenValueConverterを使用する方法はありません。

ブール値から列挙型に変換する必要がある場合は、IValueConverterを使用して独自のコンバータを作成することをお勧めします。

実際の問題には、これが最適です。

また、あなたはそれがこのような依存関係プロパティに、あなたのviewmodelプロパティを変更することによって達成することができ、あなたの列挙値に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

関連する問題