首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF ComboBox: ComboBoxItems的静态列表,但数据绑定SelectedItem?

WPF ComboBox: ComboBoxItems的静态列表,但数据绑定SelectedItem?
EN

Stack Overflow用户
提问于 2012-09-23 16:49:24
回答 1查看 18.2K关注 0票数 15

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

我的ComboBox声明如下所示:

代码语言:javascript
运行
复制
    <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的数量绑定到ViewModel的SelectedItem属性,该属性声明为一个整数:

代码语言:javascript
运行
复制
public class MyViewModel : INotifyPropertyChanged
{
    private int _amount = 3;

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

    //...
}

我希望SelectedValuePath=" Tag“会告诉WPF它应该使用标记值绑定到视图模型的Amount属性,但是当我运行此应用程序并更改组合框的选定项时,调试跟踪告诉我:

代码语言:javascript
运行
复制
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绑定到我的ViewModel,而不仅仅是它的标记值。我做错了什么?

EN

Stack Overflow用户

回答已采纳

发布于 2012-09-23 16:57:34

如果使用SelectedValuePath,则需要绑定到SelectedValue属性,该属性是

获取或设置通过使用SelectedValuePath获取的SelectedItem的值

因此将您绑定修改为

代码语言:javascript
运行
复制
SelectedValue="{Binding Path=Amount, Mode=TwoWay}" 

因为正如您所经历的那样,SelectedItem将始终包含实际选择的项(在本例中为ComboBoxItem),而不是值。

票数 18
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12550926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档