Enumerations (enum) en XAML

La syntaxe du XAML ne se prêtant pas particulièrement à ce type de données, l'utilisation des enums en code déclaratif n'est pas instinctive. Le code de ce post démontre plusieurs utilisations d'enums en XAML. Le premier exemple est un ObjectDataProvider appelant Enum.GetValues afin de définir un enum en tant qu'ItemsSource d'un ItemsControl :

<ObjectDataProvider x:Key="threadPriorityOdp"

     ObjectType="{x:Type system:Enum}"

    MethodName="GetValues">

  <ObjectDataProvider.MethodParameters>

    <x:Type TypeName="threading:ThreadPriority"/>

  </ObjectDataProvider.MethodParameters>

</ObjectDataProvider>
...
<ListBox x:Name="lbx" ItemsSource="{Binding Source={StaticResource threadPriorityOdp}}"/>

L'enum sélectionné est ensuite utilisé comme déclencheur d'un DataTrigger, dont la valeur est définie ainsi :

<DataTrigger Binding="{Binding}">

  <DataTrigger.Value>

    <threading:ThreadPriority>Lowest</threading:ThreadPriority>

  </DataTrigger.Value>

  <Setter Property="Background" Value="#5555FF"/>

</DataTrigger>

La troisième partie de l'exemple montre l'utilisation d'Enum.Parse dans un IValueConverter afin de parser une chaîne en enum depuis une TextBox; le résultat est ensuite appliqué à un label soumis au même DataTrigger que dans la première partie.

public object Convert(…)

{

  if (value is string)

    try { return Enum.Parse(parameter as Type, value as string, true); }

    catch (ArgumentException) { return null; }

  else

  return null;

}

Notons que pour ces trois exemples aucun code-behind n'aura été nécessaire dans la fenêtre principale!

EnumDataTrigger.zip