2009-12-16 34 views
10

En mi modelo de vista tengo una propiedad int y quiero exponerla para editarla con un ComboBox, con un conjunto limitado de opciones, como 16, 8, 4 y 2. ¿Hay alguna manera de especificar las opciones en el XAML, mientras sigue uniendo el valor al modelo de vista? Me gustaría hacer algo como esto:ComboBox WPF enlazado a datos con opciones definidas en XAML?

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

Sé que podría montar un List<int> en el código y establecer que a medida que la ItemsSource, pero estoy esperando que hay una manera de hacer esto que no implique una propiedad adicional en el modelo de vista que expone una colección creada en código.

Respuesta

13

Puede especificar sus elecciones exactamente como lo hace en su ejemplo. Lo que parece que falta, para que funcione, es la propiedad SelectedValuePath. Sin él, SelectedValue sería el mismo que SelectedItem. Al establecer SelectedValuePath = "Contenido" en el ComboBox, puede especificar que su enlace SelectedValue sea vinculante solo para una parte del SelectedItem, en este caso el contenido Int que especificó como contenido en cada ComboBoxItem.

Aquí hay una pequeña demostración con ella, y también vincula el valor a un TextBox, donde puede establecer el elemento y verlo reflejado en el ComboBox mediante el enlace SelectedValue (o viceversa).

<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 thanks. De hecho, había intentado exactamente eso, pero pensé que no estaba funcionando porque mi propiedad aún no estaba configurada. Aún así, es bueno tener esta respuesta explícitamente porque no pude encontrarla cuando busqué. – RandomEngy

Cuestiones relacionadas