使用XAML定义的数据绑定WPF ComboBox,选项是什么?

10

在我的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>

我知道我可以在代码中设置一个 List<int> 并将其作为 ItemsSource,但我希望有一种方法可以不涉及在视图模型中公开由代码创建的集合的额外属性。

1个回答

13
你可以按照你的示例精确地指定选择内容。 你似乎忘了让它工作所需的SelectedValuePath属性。没有它,SelectedValue将与SelectedItem相同。通过在ComboBox中设置SelectedValuePath =“Content”,你可以指定你的SelectedValue绑定只绑定到SelectedItem的一部分,在这种情况下,每个ComboBoxItem中你指定为内容的Int内容。

这是一个小演示,还将值绑定到一个TextBox,在其中你可以设置项并通过SelectedValue绑定在ComboBox中反映出来(反之亦然)。

<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>

啊,谢谢。我其实已经尝试过那个方法了,但是当时认为它没有起作用是因为我的属性还没有被设置。不过,很高兴能够在这里明确地得到答案,因为我在搜索时找不到它。 - RandomEngy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接