c# - WPF ComboBox : static list of ComboBoxItems, 但数据绑定(bind) SelectedItem?

标签 c# wpf data-binding combobox

在我的 WPF 应用程序中,我有一个 ComboBox,其中填充了 ComboBoxItems 的静态列表,因为它的内容永远不会改变。但是,因为我想将 SelectedItem 数据绑定(bind)到我的底层 ViewModel,所以我希望每个 ComboBoxItem 也有一个单独的值,该值将分配给我的 ViewModel 属性。我在让它工作时遇到了一些麻烦。

我的 ComboBox 声明如下:

    <ComboBox Height="23" HorizontalAlignment="Stretch" Margin="2" Name="comboBox1" VerticalAlignment="Top"
              SelectedItem="{Binding Path=Amount, Mode=TwoWay}" SelectedValuePath="Tag" >
        <ComboBoxItem Content="None" Tag="0" />
        <ComboBoxItem Content="Few" Tag="1" />
        <ComboBoxItem Content="Some" Tag="2" />
        <ComboBoxItem Content="Enough" Tag="3" />
        <ComboBoxItem Content="Lots" Tag="4" />
        <ComboBoxItem Content="Too much" Tag="5" />
    </ComboBox>

此 ComboBox 的 SelectedItem 绑定(bind)到 ViewModel 的 Amount 属性,该属性声明为整数:

public class MyViewModel : INotifyPropertyChanged
{
    private int _amount = 3;

    public int Amount
    {
        get { return _amount; }
        set
        {
            _amount = value;
            OnPropertyChanged("Amount");
        }
    }

    //...
}

我希望 SelectedValuePath="Tag"会告诉 WPF 它应该使用 Tag 值绑定(bind)到 ViewModel 的 Amount 属性,但是当我运行这个应用程序并更改 ComboBox 的选定项时,调试跟踪告诉我:

System.Windows.Data Error: 23 : Cannot convert 'System.Windows.Controls.ComboBoxItem: Some' from type 'ComboBoxItem' to type 'System.Int32' for 'en-US' culture ...
System.Windows.Data Error: 7 : ConvertBack cannot convert value 'System.Windows.Controls.ComboBoxItem: Some' (type 'ComboBoxItem'). (...) System.NotSupportedException: Int32Converter cannot convert from System.Windows.Controls.ComboBoxItem.

显然,它试图将整个 ComboBoxItem 绑定(bind)到我的 ViewModel,而不仅仅是它的 Tag 值。 我做错了什么?

最佳答案

如果您使用 SelectedValuePath,那么您需要绑定(bind)到 SelectedValue属性是

Gets or sets the value of the SelectedItem, obtained by using SelectedValuePath

所以修改你的绑定(bind)到

SelectedValue="{Binding Path=Amount, Mode=TwoWay}" 

因为根据您的经验,SelectedItem 将始终包含实际选择的项目(在您的情况下为 ComboBoxItem)而不是值。

关于c# - WPF ComboBox : static list of ComboBoxItems, 但数据绑定(bind) SelectedItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550926/

相关文章:

c# - WPF/MVVM : Need help to fix a broken binding with ContentControl + DataTemplate

c# - C#改变颜色透明度的方法

c# - 如何将 char 和 char* 从 C# 传递到 C++/CLI?

wpf - XAML 和 QML 等声明式 UI 语言在现实世界中有何好处?

wpf - 在 Prism 中使用 ModuleManager 加载模块

c# - 如何在 WPF C# 中设置 RichTextBox 中文本的行距?

c# - 将 MediaElement 的源属性绑定(bind)到 FileInfo

c# - 带有嵌入式 list 的 C# 4.0 应用程序是否需要在客户端计算机上安装数字证书或 Stong 名称?

wpf - WPF 绑定(bind) StringFormat 中的 & 符号

c# - WPF - 数据绑定(bind)时是否正在进行某种隐式转换?