具有在 XAML 中定义的选项的数据绑定 WPF ComboBox?

Posted

技术标签:

【中文标题】具有在 XAML 中定义的选项的数据绑定 WPF ComboBox?【英文标题】:Data bound WPF ComboBox with choices defined in XAML? 【发布时间】: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,但我希望有一种方法可以做到这一点,它不涉及视图模型中的额外属性,该属性公开在代码。

【问题讨论】:

【参考方案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>

【讨论】:

啊,谢谢。我实际上已经尝试过那个确切的东西,但认为它不起作用,因为我的属性尚未设置。不过,很高兴有这个答案,因为我在搜索时找不到它。

以上是关于具有在 XAML 中定义的选项的数据绑定 WPF ComboBox?的主要内容,如果未能解决你的问题,请参考以下文章

WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了

WPF ----在UserControl的xaml里绑定依赖属性

WPF 绑定

wpf 带参数的用户控件,如何在xaml中引入

WPF 使用XML作为绑定源时Xaml注意事项

C# WPF中xaml怎么调用.cs中的数据?反过来怎么调用?