具有在 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<int>
并将其设置为 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 中定义的属性也能使用绑定了