c# - 具有 XAML 中定义的选项的数据绑定(bind) WPF ComboBox?

标签 c# wpf data-binding mvvm combobox

在我的 View 模型上,我有一个 int属性,我想使用 ComboBox 公开它以进行编辑,并使用一组有限的选项,例如 16、8、4 和 2。有没有一种方法可以在 XAML 中指定选项,同时仍然将值绑定(bind)回 View 模型?我想做这样的事情:

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

我知道我可以组装一个 List<int>在代码中并将其设置为 ItemsSource,但我希望有一种方法可以做到这一点,它不涉及 View 模型中公开在代码中创建的集合的额外属性。

最佳答案

您可以完全按照示例中的方式指定您的选择。为了使其正常工作,您缺少的是 SelectedValuePath 属性。没有它,SelectedValue 将与 SelectedItem 相同。通过在 ComboBox 中设置 SelectedValuePath="Content",您可以指定您的 SelectedValue 绑定(bind)只绑定(bind)到 SelectedItem 的一部分,在本例中是您指定为每个 ComboBoxItem 中的内容的 Int 内容。

这里有一个小演示,还将值绑定(bind)到文本框,您可以在其中设置项目并通过 SelectedValue 绑定(bind)(反之亦然)在 ComboBox 中看到它的反射(reflect)。

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

关于c# - 具有 XAML 中定义的选项的数据绑定(bind) WPF ComboBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917996/

相关文章:

c# - 当我们使用 ASP.NET 路由值而不是 QueryString 值时,缓存 Vary BY Param

wpf - 绑定(bind)到数据上下文之外的属性

c# - 带有组合框列的 DatagridView 虚拟模型

c# - 实现自己的 ObservableCollection

wpf - 如何在不使用 WPF/MVVM 中的依赖解析器的情况下初始化嵌套 View (和 ViewModel)

wpf - 在 Value = Maximum 后停止 ProgressBar 动画

javascript - SAPUI5 为 TreeTable/空行创建 JSON

c# - 无法将选择的值分配给组合框

c# - 在 ObservableCollection.CollectionChanged 上运行昂贵的操作

c# - 当用户在 richtextbox 中输入时,我可以使用 WPF 进行自动单词替换吗