2012-09-23 13 views
12

In meiner WPF-Anwendung habe ich eine ComboBox, die mit einer statischen Liste von ComboBoxItems gefüllt ist, da sich ihr Inhalt nie ändern wird. Da ich jedoch das SelectedItem in mein zugrunde liegendes ViewModel übertragen möchte, möchte ich jedem ComboBoxItem auch einen separaten Wert zuweisen, der meiner ViewModel-Eigenschaft zugewiesen werden soll. Und ich habe ein paar Probleme, damit das funktioniert.WPF ComboBox: statische Liste von ComboBoxItems, aber datengebunden SelectedItem?

Meine ComboBox Erklärung wie folgt aussieht:

<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> 

Die SelectedItem dieser ComboBox ist auf den Betrag Eigenschaft Viewmodel gebunden, die als Integer deklariert ist:

public class MyViewModel : INotifyPropertyChanged 
{ 
    private int _amount = 3; 

    public int Amount 
    { 
     get { return _amount; } 
     set 
     { 
      _amount = value; 
      OnPropertyChanged("Amount"); 
     } 
    } 

    //... 
} 

Ich hatte gehofft, dass SelectedValuePath = „Tag“ würde WPF sagen, dass es den Tag-Wert auf das Ansichtsmodell des Betrag Eigenschaft zu binden, verwenden sollte, aber wenn ich diese Anwendung ausführen und die ausgewählten Elemente ComboBox ändern, der Debug-Trace sagt mir:

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. 

Offensichtlich versucht er die gesamte ComboBoxItem zu meinem Viewmodel zu binden, nicht nur seinen Tag-Wert. Was mache ich falsch?

Antwort

14

Wenn Sie SelectedValuePath verwenden dann Sie auf die SelectedValue Eigenschaft binden, müssen die

ist

Ruft den Wert des SelectedItem, erhalten durch SelectedValuePath mit

Ihre So ändern Bindung an

SelectedValue="{Binding Path=Amount, Mode=TwoWay}" 

weil wie Sie die SelectedItem immer contai n der tatsächlich ausgewählte Artikel (in Ihrem Fall ComboBoxItem) nicht der Wert.

+0

Wow, das war einfach ... Außerdem "bekomme" ich jetzt, wo ich falsch gelaufen bin. Danke für Ihre Erklärung! – Astrotrain

Verwandte Themen