На моем viewmodel я имею int
свойство и я хотим представить его для редактирования с ComboBox, с ограниченным набором выбора, такой как 16, 8, 4 и 2. Существует ли способ определить выбор в XAML, все еще связывая значение назад с viewmodel? Я хотел бы сделать что-то вроде этого:
<ComboBox SelectedValue="{Binding MyIntProperty}">
<ComboBoxItem>16</ComboBoxItem>
<ComboBoxItem>8</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
</ComboBox>
Я знаю, что мог подстроить a List<int>
в коде и наборе, что как ItemsSource, но я надеюсь, существует способ сделать это, которое не вовлекает дополнительное свойство в viewmodel, который представляет набор, созданный в коде.
Вы можете указать свой выбор точно так же, как в вашем примере. Похоже, что вам не хватает, чтобы заставить его работать, это свойство SelectedValuePath. Без него SelectedValue был бы таким же, как SelectedItem. Установив SelectedValuePath = "Content" в 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>