2011-04-07 12 views
12

मुझे Binding के साथ कोई समस्या थी। Rectangle.Fill निर्भरता संपत्ति कनवर्टर के साथ ObservableCollection तक बाध्य थी। हालांकि ObservableCollectionINotifyCollectionChanged लागू करता है, बाध्यकारी अद्यतन नहीं किया गया था। मैं कामयाब रहे, हालांकि, संग्रह के परिवर्तन सूचना घटना के लिए अपने प्रतिनिधिमंडल संलग्न और रीफ़्रेश करके इस हल करने के लिए मैन्युअल रूप से बाध्यकारी: हाल ही मेंमैन्युअल रूप से मल्टीबाइंडिंग को अपडेट करने के लिए

void ColorsCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     BindingExpression b = colorRectangle.GetBindingExpression(Rectangle.FillProperty); 
     if (b != null) 
      b.UpdateTarget(); 
    } 

, तथापि, मैं BindingMultiBinding लिए बदल गया है, और इसके बाद के संस्करण समाधान काम करना बंद कर (bnull है)। लक्षित संपत्ति को अपडेट करने के लिए Multibinding को मजबूर करने का कोई तरीका है?

सर्वश्रेष्ठ संबंध - स्पूक।

+0

क्या तुमने कभी यह पता लगाने क्यों बाध्यकारी/Multibinding CollectionChanged घटनाओं का जवाब नहीं है किया था? – skybluecodeflier

उत्तर

24

एक बहुआयामी के लिए, बाध्यकारी अभिव्यक्ति MultiBindingExpression है, जो BindingExpressionBase से प्राप्त होती है, लेकिन BindingExpression से नहीं। तो GetBindingExpression एक multibinding के लिए शून्य वापस देता है। इसके बजाय आप BindingOperations.GetMultiBindingExpression उपयोग कर सकते हैं:

MultiBindingExpression b = BindingOperations.GetMultiBindingExpression(colorRectangle, Rectangle.FillProperty); 
+0

कूल, काम करता है। धन्यवाद! – Spook

+4

ज्यादातर प्राप्त बाइंडिंग मैन्युअल स्रोत अपडेट के लिए उपयोग किया जाता है ... और इसके लिए आप सामान्यीकृत का उपयोग कर सकते हैं: 'बाइंडिंग एक्सपेरेशनबेस बी = बींडिंगऑपरेशंस.गेट बाइंडिंग एक्सपेरेशनबेस (रंगरेटेल, आयत। फिलप्रोपर्टी); इस तरह इससे कोई फर्क नहीं पड़ता कि यह बाध्यकारी है, मल्टीबाइंडिंग या कोई अन्य जो बाद में आएगा। –

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