В моем приложении WPF у меня есть ComboBox, который заполнен статическим списком ComboBoxItems, потому что его содержимое никогда не изменится. Однако, поскольку я хочу привязать выбранный элемент к моему базовому ViewModel, я хочу, чтобы каждый ComboBoxItem также имел отдельное значение, которое должно быть присвоено моему свойству ViewModel. И у меня есть немного проблем, чтобы заставить это работать.
Объявление My 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 привязан к свойству ViewModel Amount, объявленному как целое число:
public class MyViewModel : INotifyPropertyChanged
{
private int _amount = 3;
public int Amount
{
get { return _amount; }
set
{
_amount = value;
OnPropertyChanged("Amount");
}
}
//...
}
Я надеялся, что SelectedValuePath = "Тег" сообщит WPF, что он должен использовать значение тега для привязки к свойству 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. Что я делаю неправильно?