2009-05-14 9 views
8

मेरे पिछले प्रश्न से संबंधित: Binding ComboBox.SelectedItem in Silverlightसिल्वरलाइट में ComboBox.SelectedItem बाइंडिंग (अधिक)

मैं कोई ComboBox तो जैसे बाध्य है

<ComboBox x:Name="PART_CommentaryList" 
    HorizontalAlignment="Left" 
    Margin="3" 
    ItemsSource="{Binding Path=CurrentVideo.Commentaries}" 
    SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}"> 

दोनों CurrentVideo और CurrentCommentary संपत्ति परिवर्तन नियमित रूप से। कुछ बार बाद में, मुझे यह त्रुटि मिलती है:

Category: ManagedRuntimeError  
Message: System.ArgumentException: Value does not fall within the expected 
    range. 
    at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, 
     CValue[] cvData) 
    at MS.Internal.XcpImports.MethodPack(IntPtr objectPtr, String methodName, 
     Object[] rawData) 
    at MS.Internal.XcpImports.UIElement_TransformToVisual(UIElement element, 
     UIElement visual) 
    at System.Windows.UIElement.TransformToVisual(UIElement visual) 
    at System.Windows.Controls.Primitives.Selector.IsOnCurrentPage(
     Int32 index, Rect& itemsHostRect, Rect& listBoxItemRect) 
    at System.Windows.Controls.Primitives.Selector.ScrollIntoView(
     Int32 index) 
    at System.Windows.Controls.Primitives.Selector.SetFocusedItem(
     Int32 index, Boolean scrollIntoView) 
    at System.Windows.Controls.ComboBox.PrepareContainerForItemOverride(
     DependencyObject element, Object item) 
    at System.Windows.Controls.ItemsControl.UpdateContainerForItem(
     Int32 index) 
    at System.Windows.Controls.ItemsControl.RecreateVisualChildren() 
    at System.Windows.Controls.ItemsControl.RecreateVisualChildren(
     IntPtr unmanagedObj) 

यह मेरे लिए कॉम्बोबॉक्स बग जैसा लगता है। मैं सत्यापित कर सकता हूं कि CurrentCideomentCommentary से पहले CurrentVideo बदलता है, इसलिए चयनित आइटम हमेशा एक आइटम होना चाहिए जो सूची में है।

संबंधित, मैं वास्तव में मोड = दोवे नहीं चाहता, क्योंकि जब आइटमसोर्स बदल जाता है, तो चयनित इटैम अस्थायी रूप से शून्य है, जो मेरे मॉडल में वापस सेट हो जाता है, जिसे मैं वास्तव में नहीं चाहता हूं। लेकिन बाध्यकारी अन्यथा काम नहीं करता है (जो एक और बग की तरह लगता है)।

+0

क्या आप यह सुनिश्चित करने के लिए जांच कर रहे हैं कि CurrentCommentary अभी भी CurrentVideo में है। टिप्पणी सूची, क्योंकि यदि यह नहीं है, तो आपको यह त्रुटि मिल जाएगी। –

+0

मैंने यह जांचने के लिए दोनों चयनित गुणों में कनवर्टर इंजेक्शन दिया है कि चयनित आइटम वास्तव में आइटम्ससोर्स में है या नहीं। ऐसा लगता है: आइटम स्रोत बदलता है। उस परिवर्तन ने चयनित इटैम को शून्य बनने का कारण बनता है। चयनित कॉमेंटरी बदलाव शून्य में है क्योंकि यह दो तरह से बाध्यकारी है। चयनित कॉमेंटरी ऐप द्वारा उचित मूल्य पर सेट है, यह मान निश्चित रूप से आइटमसोर्स के भीतर है। त्रुटि होती है। यदि बाइंडिंग मोड दोवे नहीं है, तो कोई त्रुटि नहीं है, लेकिन फिर उचित आइटम कभी नहीं चुना जाता है। –

उत्तर

0

Combobox एक काफी गाड़ी SL नियंत्रण :-(मैं चयनित आइटम declarativa बंधन और बुरा कोडिंग दृष्टिकोण का उपयोग के साथ छोड़ दिया है

मेरे मामले में ... बदसूरत लेकिन काम करता है:।

http://blogs.msdn.com/mikehillberg/archive/2009/03/26/implementing-selectedvalue-with-the-silverlight-combobox.aspx

HTH Braulio

+0

दिलचस्प पोस्ट, लेकिन यह मेरी समस्या के लिए वास्तव में प्रासंगिक प्रतीत नहीं होता है। हालांकि, मैंने DisplayMemberPath के बारे में सीखा था। पहले मैं आइटम की एक संपत्ति प्रदर्शित करने के लिए बस एक नया डेटा टेम्पलेट सेट करूँगा। –

0

मैं एक ही मुद्दा हो रही थी कुछ समय पहले और क्या मैं यह बता सकते हैं ComboBox में एक बग है से ItemSource बदल गया है जब यह लेआउट और अनुसूचित जाति से कोई समस्या है बुरी तरह रोल करता है।

आइटमसोर्स और चयनित इटैम को सेट करने के बीच कॉम्बोबॉक्स। अद्यतनडेटा कॉल करके एक काम है।

मैंने कुछ समय पहले Gotcha when databinding a ComboBox in Silverlight पर समस्या के बारे में ब्लॉग किया था।

मैं अभी तक है सत्यापित करने के लिए कि क्या समस्या अभी भी सिल्वरलाइट 3 बीटा में मौजूद है

+0

अद्यतन लेआउट का उपयोग करना एक अच्छा तरीका है, लेकिन मैंने इसे एक शॉट दिया और अभी भी एक ही त्रुटि के साथ समाप्त हो गया। कोड में चयनित या बाध्यकारी के माध्यम से इसे स्थापित करते समय मुझे यह मिलता है। –

+0

अपने ब्लॉग में नमूने में आप एक ऐसी संपत्ति के लिए बाध्यकारी हैं जहां गेटर गतिशील रूप से एक नया ओसी प्राप्त करने पर है। इससे आइटम्ससोर्स द्वारा मूल्यांकन किए जाने वाले सूचक को हर बार बाध्यकारी में बदल दिया जाएगा। ओसी घोषित करने के लिए एक और स्थिर दृष्टिकोण होगा, और इसमें आइटम जोड़ें। इसके अलावा, गतिशील रूप से एक ओसी का निर्माण करके, वहाँ भी एक ओसी आप के रूप में अच्छी तरह से एक सूची उपयोग कर सकते हैं का उपयोग करने में कोई मतलब नहीं है। – markti

+0

सहमत हुए, अंत में मैं इस तरह के मॉडल में स्थानांतरित हो गया, हालांकि आइटम स्रोतों को बदलने के दौरान यह अभी भी एक बग है। –

1

उपरोक्त सुझावों के लिए धन्यवाद। मेरी स्थिति में मैं "परमाणु विकल्प" के लिए जा सकता हूं, जो है - जब भी चयनित आइटम को बदलने की ज़रूरत होती है, मैं कॉम्बोबॉक्स को पूरी तरह से नष्ट कर देता हूं, एक नया बना देता हूं, और इसके चयनित इटैम को उचित रूप से सेट करता हूं।

हास्यास्पद, लेकिन यह काम करता है।

13

यह कॉम्बोबॉक्स नियंत्रण में एक बग है जिसे आइटम्ससोर्स के बाध्यकारी के बदलते सूचक के साथ करना है। जो समाधान मैंने पाया है वह है:

1) हमेशा आइटम्ससोर्स को एक अवलोकन संग्रह में बाध्य करें और ओसी के सूचक को कभी भी रीसेट न करें।

<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyItem}" /> 

बुरा:

MyList = new ObservableCollection(); 

अच्छा:

MyList.Clear(); 
MyList.AddRange(...); 

2) सेट MyItem = अशक्त, इससे पहले कि क्लियरिंग MyList

अपने मामले में आप सूची के संदर्भ बदल रहे हैं जब भी आप CurrentView बदलते हैं। इसलिए, यदि चयनित इटिम शून्य नहीं है, तो उस समय एक संक्षिप्त क्षण है जहां आइटमसोर्स रीसेट किया जा रहा है, कॉम्बोबॉक्स के आंतरिक नए आइटमसोर्स में चयनित इटैम ऑब्जेक्ट का पता लगाने का प्रयास कर रहे हैं लेकिन पुरानी वस्तु वहां नहीं है।

+0

इस सुझाव @markti के लिए धन्यवाद। मुझे अपने विंडोज 8.1 स्टोर ऐप में भी यही त्रुटि थी और यह मुझे चिकित्सा के लिए चला रहा था। दिलचस्प तथ्य यह है कि मैंने अभी एक ही दृष्टिकोण का उपयोग किया जो एक अलग दृश्य में पूरी तरह से ठीक काम करता है, जहां मेरा कॉम्बोबॉक्स का आइटमसोर्स एक सूची <> और एक अवलोकन योग्य नहीं है। मैं बेहतर वापस जाता हूं और वहां भी बदल जाता हूं। – Eddie

संबंधित मुद्दे