在我的 WPF 应用程序中,我有一个 ComboBox,其中填充了 ComboBoxItems 的静态列表,因为它的内容永远不会改变。但是,因为我想将 SelectedItem 数据绑定到我的底层 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 绑定到 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 值。我究竟做错了什么?