2009-12-16 9 views
10

Auf meinem Viewmodel habe ich eine int-Eigenschaft, und ich möchte es für die Bearbeitung mit einer ComboBox mit einer begrenzten Auswahlmöglichkeiten, wie 16, 8, 4 und 2 verfügbar machen. Gibt es eine Möglichkeit, die Auswahlmöglichkeiten in der XAML, während der Wert immer noch an das Viewmodel gebunden wird? Ich würde wollen, so etwas tun:Datengebundene WPF ComboBox mit in XAML definierten Auswahlmöglichkeiten?

<ComboBox SelectedValue="{Binding MyIntProperty}"> 
    <ComboBoxItem>16</ComboBoxItem> 
    <ComboBoxItem>8</ComboBoxItem> 
    <ComboBoxItem>4</ComboBoxItem> 
    <ComboBoxItem>2</ComboBoxItem> 
</ComboBox> 

Ich weiß, ich könnte ein List<int> in Code rig und festgelegt, dass als Itemssource, aber ich hoffe, es gibt einen Weg, dies zu tun, die nicht beteiligt sind eine zusätzliche Eigenschaft im Ansichtsmodell, die eine im Code erstellte Sammlung verfügbar macht.

Antwort

13

Sie können Ihre Auswahl genau wie in Ihrem Beispiel angeben. Wie es aussieht, fehlt Ihnen, um es zum Laufen zu bringen, die SelectedValuePath-Eigenschaft. Ohne es wäre SelectedValue dasselbe wie SelectedItem. Wenn Sie SelectedValuePath = "Content" in der ComboBox setzen, können Sie angeben, dass Ihre SelectedValue-Bindung stattdessen an nur einen Teil des SelectedItem bindet, in diesem Fall den Int-Inhalt, den Sie als Inhalt in jedem ComboBoxItem angegeben haben.

Hier ist eine kleine Demo und bindet den Wert an eine TextBox, wo Sie das Element festlegen und in der ComboBox durch die SelectedValue-Bindung (oder umgekehrt) widerspiegeln können.

<StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Set Value:" /> 
     <TextBox Text="{Binding MyIntProperty, UpdateSourceTrigger=PropertyChanged}" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Select Value:" /> 
     <ComboBox SelectedValue="{Binding MyIntProperty}" SelectedValuePath="Content"> 
      <ComboBoxItem>2</ComboBoxItem> 
      <ComboBoxItem>4</ComboBoxItem> 
      <ComboBoxItem>6</ComboBoxItem> 
      <ComboBoxItem>8</ComboBoxItem> 
      <ComboBoxItem>16</ComboBoxItem> 
     </ComboBox> 
    </StackPanel> 
</StackPanel> 
+0

Ahh danke. Ich hatte tatsächlich genau dieses Ding versucht, dachte aber, dass es nicht funktionierte, weil mein Grundstück noch nicht festgelegt worden war. Trotzdem schön, diese Antwort explizit da draußen zu haben, da ich sie beim Suchen nicht finden konnte. – RandomEngy