【问题标题】:Data bound WPF ComboBox with choices defined in XAML?具有在 XAML 中定义的选项的数据绑定 WPF ComboBox?
【发布时间】:2010-12-27 10:36:27
【问题描述】:

在我的视图模型上,我有一个 int 属性,我想公开它以使用 ComboBox 进行编辑,选择有限,例如 16、8、4 和 2。有没有办法指定XAML 中的选择,同时仍将值绑定回视图模型?我想做这样的事情:

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

我知道我可以在代码中设置 List&lt;int&gt; 并将其设置为 ItemsSource,但我希望有一种方法可以做到这一点,它不涉及视图模型中的额外属性,该属性公开在代码。

【问题讨论】:

    标签: c# wpf data-binding mvvm combobox


    【解决方案1】:

    您可以完全按照您在示例中的方式指定您的选择。为了使它起作用,看起来您缺少的是 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>
    

    【讨论】:

    • 啊,谢谢。我实际上已经尝试过那个确切的东西,但认为它不起作用,因为我的属性尚未设置。不过,很高兴有这个答案,因为我在搜索时找不到它。
    猜你喜欢
    • 2012-06-12
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多