La liaison de données enum propriété à un ComboBox dans WPF

Comme un exemple, le code suivant:

public enum ExampleEnum { FooBar, BarFoo }

public class ExampleClass : INotifyPropertyChanged
{
    private ExampleEnum example;

    public ExampleEnum ExampleProperty 
    { get { return example; } { /* set and notify */; } }
}

Je veux un à databind la propriété ExampleProperty à une zone de liste déroulante, de sorte qu'il affiche les options "FooBar" et "BarFoo" et fonctionne en mode Bidirectionnel. Idéalement, je veux que mon ComboBox définition à ressembler à quelque chose comme ceci:

<ComboBox ItemsSource="What goes here?" SelectedItem="{Binding Path=ExampleProperty}" />

Actuellement, j'ai des gestionnaires pour la zone de liste déroulante.SelectionChanged et ExampleClass.PropertyChanged événements installé dans ma Fenêtre où je fais la liaison manuellement.

Est-il mieux ou une sorte de manière canonique? Souhaitez-vous généralement utiliser les Convertisseurs et comment feriez-vous pour remplir la zone de liste déroulante avec les valeurs de droite? Je ne veux pas même obtenir a commencé avec i18n droit maintenant.

Modifier

Alors une question a été répondu: Comment dois-je remplir la zone de liste déroulante avec les valeurs de droite.

Récupérer les valeurs de l'Enum comme une liste de chaînes de caractères via un ObjectDataProvider de la statique Enum.Méthode GetValues:

<Window.Resources>
    <ObjectDataProvider MethodName="GetValues"
        ObjectType="{x:Type sys:Enum}"
        x:Key="ExampleEnumValues">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="ExampleEnum" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>

Ce que je peux utiliser comme un ItemsSource de ma zone de liste déroulante:

<ComboBox ItemsSource="{Binding Source={StaticResource ExampleEnumValues}}"/>
  • J'ai exploré, et d'une solution que vous pouvez utiliser (avec localisation) dans WPF situé à ici.
InformationsquelleAutor Maximilian | 2008-09-12