2012-09-23 24 views
12

मेरे डब्ल्यूपीएफ एप्लिकेशन में, मेरे पास एक कॉम्बोबॉक्स है जो कॉम्बोबॉक्स इटम्स की एक स्थिर सूची से भरा है क्योंकि इसकी सामग्री कभी नहीं बदलेगी। हालांकि, क्योंकि मैं चयनित अंतर्निहित को अपने अंतर्निहित व्यूमोडेल में डाटाबेस करना चाहता हूं, मैं चाहता हूं कि प्रत्येक कॉम्बोबॉक्स इटिम के पास एक अलग मूल्य भी हो जो मेरे व्यूमोडेल प्रॉपर्टी को असाइन किया जाए। और मुझे यह काम करने में थोड़ा परेशानी हो रही है।डब्ल्यूपीएफ कॉम्बोबॉक्स: कॉम्बोबॉक्स इटम्स की स्थिर सूची, लेकिन चयनित इटैम डेटाबेस?

मेरे 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 की राशि संपत्ति है, जो एक पूर्णांक के रूप में घोषित किया जाता है के लिए बाध्य है:

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

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

    //... 
} 

मुझे लगता है कि SelectedValuePath = उम्मीद कर रही थी "टैग" डब्ल्यूपीएफ को बताएगा कि इसे व्यूमोडेल की रकम संपत्ति से जुड़ने के लिए टैग वैल्यू का उपयोग करना चाहिए, लेकिन जब मैं इस एप्लिकेशन को चलाता हूं और कॉम्बोबॉक्स के चुने हुए आइटम को बदलता हूं, तो डीबग ट्रेस मुझे बताता है:

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. 

जाहिर है, यह पूरे कॉम्बोबॉक्स Item को मेरे व्यूमोडेल में बांधने की कोशिश करता है, न केवल इसके टैग मूल्य। मैं क्या गलत कर रहा हूँ?

उत्तर

14

आप तो SelectedValuePath का उपयोग आप SelectedValue संपत्ति जो

हो जाता है या SelectedItem का मूल्य सेट करने के लिए बाध्य करने के लिए की जरूरत है, SelectedValuePath

का उपयोग कर

द्वारा प्राप्त तो अपने

के लिए बाध्य संशोधित
SelectedValue="{Binding Path=Amount, Mode=TwoWay}" 

क्योंकि आपने अनुभव किया है SelectedItem हमेशा contai n वास्तव में चयनित आइटम (आपके मामले में ComboBoxItem) मूल्य नहीं।

+0

वाह, यह आसान था ... इसके अलावा, अब मैं 'मिल गया' जहां मैं गलत हो गया। आपके विवरण के लिये धन्यवाद! – Astrotrain