Will man eine ComBox über das Binding befüllen, kann man dazu den ObjectDataProvider verwenden.

Ich  deklariere dazu eine statische Klasse namens Collections, in der eine oder mehrere Aufzählungen implementiert werden. In meinem Beispiel verwende ich die die Aufzählung GetAnreden

Diese Methode ist statisch und  hat ein Dictionary als Rückgabewert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <summary>
/// Stellt für den ObjectProvider im XAML die ComboBoxItems zur Verfuegung
/// </summary>
public static class Collections
{
    public static Dictionary<Anrede, string> GetAnreden()
    {
        Dictionary<Anrede, string> choices = new Dictionary<Anrede, string>();
        choices.Add(Anrede.OhneAnrede, "Ohne Anrede");
        choices.Add(Anrede.Herr, "Herr");
        choices.Add(Anrede.Frau, "Frau");
        choices.Add(Anrede.Fraeulein, "Fräulein");
        choices.Add(Anrede.HerrUndFrau, "Eheleute");
        choices.Add(Anrede.Firma, "Firma");
        return choices;
    }
}

Im XAML definiere ich als Resource den ObjectDataProvider.

1
2
3
<UserControl.Resources>
    <ObjectDataProvider x:Key="GetAnreden" ObjectType="{x:Type local:Collections}" MethodName="GetAnreden"/>
</UserControl.Resources>

Und verwenden kann man den ObjectDataProvider zum Beispiel in einer ComboBox. Hier binde ich die ItemSource an den o.g. Provider. Mit DisplayMemberPath und SelectedValuePath lege ich den Key und den Value fest.

1
2
3
4
<ComboBox SelectedValue="{Binding Anrede}"
    ItemsSource="{Binding Source={StaticResource GetAnreden}}"
    DisplayMemberPath="Value"
    SelectedValuePath="Key"/>

Über den DataContext muss nun noch das ViewModelProperty gebunden werden, welche den Wert speichern soll, in diesen Beispiel mache ich das im darüber liegenden StackPanel.

1
2
3
4
5
6
<StackPanel DataContext="{Binding Person}" >
    <ComboBox SelectedValue="{Binding Anrede}"
    ItemsSource="{Binding Source={StaticResource GetAnreden}}"
    DisplayMemberPath="Value"
    SelectedValuePath="Key"/>
</StackPanel>

Das wars auch schon,

Viel Spass beim entwickeln : )


ComboBox an ObjectDataProvider binden
Markiert in: