Данные связали WPF ComboBox с выбором, определенным в XAML?

На моем 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, который представляет набор, созданный в коде.

10
задан RandomEngy 16 December 2009 в 21:47
поделиться

1 ответ

Вы можете указать свой выбор точно так же, как в вашем примере. Похоже, что вам не хватает, чтобы заставить его работать, это свойство 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>
13
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: