WPF ComboBox:ComboBoxItems的静态列表,但是数据绑定SelectedItem?
在我的WPF应用程序中,我有一个ComboBox,它充满了ComboBoxItems的静态列表,因为它的内容永远不会改变。 但是,因为我想将SelectedItem数据绑定到我的基础ViewModel,所以我希望每个ComboBoxItem也有一个单独的值,该值将分配给我的ViewModel属性。 我有点麻烦让这个工作。
我的ComboBox声明如下:
此ComboBox的SelectedItem绑定到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值绑定到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绑定到我的ViewModel,而不仅仅是它的Tag值。 我究竟做错了什么?
如果您使用SelectedValuePath
则需要绑定到SelectedValue属性
获取或设置通过SelectedValuePath获取的SelectedItem的值
所以修改你的绑定
SelectedValue="{Binding Path=Amount, Mode=TwoWay}"
因为您经历过SelectedItem
将始终包含实际选择的项目(在您的情况下为ComboBoxItem
)而不是值。