私の WPF アプリケーションには、ComboBoxItems の静的リストで満たされた ComboBox があります。その内容は変更されないためです。ただし、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" が、Tag 値を使用して ViewModel の Amount プロパティにバインドする必要があることを WPF に通知することを望んでいましたが、このアプリケーションを実行して 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.
どうやら、Tag 値だけでなく、ComboBoxItem 全体を ViewModel にバインドしようとしています。私は何を間違っていますか?