2009-12-16 2 views
10

На моей модели просмотра у меня есть свойство int, и я хочу показать его для редактирования с помощью ComboBox с ограниченным набором вариантов, например 16, 8, 4 и 2. Есть ли способ указать варианты в XAML, все еще привязывая значение к viewmodel? Я хотел бы сделать что-то вроде этого:Связанный с данными WPF ComboBox с вариантами, определенными в XAML?

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

Я знаю, что я мог бы вышка вверх List<int> в коде и установить, что как ItemsSource, но я надеюсь, что есть способ сделать это, что не связано с дополнительное свойство в viewmodel, которое предоставляет коллекцию, созданную в коде.

ответ

13

Вы можете указать свой выбор точно так же, как в своем примере. Как выглядит ваш недостающий, чтобы он работал, это свойство SelectedValuePath. Без него SelectedValue будет таким же, как SelectedItem. Установив SelectedValuePath = «Содержимое» в ComboBox, вы можете указать, что привязка SelectedValue вместо этого привязана только к части SelectedItem, в данном случае к содержанию Int, указанному вами в качестве содержимого в каждом ComboBoxItem.

Вот небольшая демонстрация с ним, а также привязка значения к TextBox, где вы можете установить элемент и увидеть его отражение в ComboBox с помощью привязки SelectedValue (или наоборот).

<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. Я действительно пробовал это, но думал, что он не работает, потому что моя собственность еще не была установлена. Тем не менее, приятно иметь этот ответ явно там, поскольку я не мог найти его при поиске. – RandomEngy

Смежные вопросы