En mi aplicación WPF, tengo un cuadro combinado que está lleno de una lista estática de ComboBoxItems debido a su contenido nunca cambiarán. Sin embargo, porque quiero DataBind el SelectedItem a mi modelo de vista subyacente, deseo que cada ComboBoxItem que también tienen un valor separado que se va a asignar a mi propiedad ViewModel. Y estoy teniendo un poco de problema para hacer que esto funcione.ComboBox WPF: lista estática de ComboBoxItems, pero SelectedItem enlace de datos?
Mi declaración ComboBox se parece a:
<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>
El SelectedItem de este cuadro combinado se une a la propiedad Monto del modelo de vista, que se declara como un entero:
public class MyViewModel : INotifyPropertyChanged
{
private int _amount = 3;
public int Amount
{
get { return _amount; }
set
{
_amount = value;
OnPropertyChanged("Amount");
}
}
//...
}
Yo esperaba que SelectedValuePath = "Tag" diría WPF que debe utilizar el valor de la etiqueta de obligar a la propiedad Monto del modelo de vista, pero cuando corro esta aplicación y cambiar el elemento seleccionado del cuadro combinado, el seguimiento de depuración me dice:
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.
Al parecer, se trata de obligar a todo el ComboBoxItem a mi modelo de vista, no sólo su valor de la etiqueta. ¿Qué estoy haciendo mal?
Wow, eso fue fácil ... Además, ahora 'mensaje' que hice mal. ¡Gracias por tu explicación! – Astrotrain