2009-04-27 6 views
7

पर अद्यतन करें, जब मेरी दृश्यता दृश्यमान में बदलती है तो मुझे अपने उपयोगकर्ता नियंत्रण पर सभी बाइंडिंग अपडेट करने की आवश्यकता होती है। इसलिए मैं उस बंधन का लक्ष्य अद्यतन करने के लिए कोशिश कर रहा हूँ काफी मेरे सारे बंधनों को उपयोगकर्ता नियंत्रण के DataContext संपत्ति के लिए बाध्य कर रहे हैं:उपयोगकर्ता नियंत्रण में सभी बाइंडिंग को एक बार

BindingOperations.GetBindingExpressionBase(this, UserControl.DataContextProperty).UpdateTarget(); 

लेकिन मैं GetBindingExpression(..) विधि के परिणाम के रूप null हो और मैं सोच रहा हूँ अगर मैं इस गलत का उपयोग कर रहा हूँ।

इसके अलावा, नियंत्रण पर सभी बाइंडिंग रीफ्रेश करने के लिए कोई अन्य अच्छा तरीका है (जो स्रोत के रूप में डेटाकॉन्टेक्स्ट का उपयोग करता है)।

उत्तर

15

ठीक है, आप सिर्फ फिर से आवंटित कर सकते हैं DataContext:

var dataContext = DataContext; 
DataContext = null; 
DataContext = dataContext; 

FYI करें, अपने मूल्य (अर्थात DataContext = DataContext) काम नहीं करेगा करने के लिए संपत्ति को रीसेट।

+0

ओएमजी, आप एक प्रतिभाशाली हैं! क्यों, मैंने इस बारे में क्यों नहीं सोचा है ?! धन्यवाद, यह काम किया :) – Alexandra

+2

क्या ऐसा करने का एक और अधिक शानदार WPF तरीका है? डब्ल्यूपीएफ कुछ प्रकार के बाध्यकारी ताज़ा तंत्र का समर्थन नहीं करना चाहिए? – BrettRobi

+2

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

1

आप गलत संपत्ति पर BindingOperations.GetBindingExpressionBase विधि का उपयोग कर रहे हैं। आपको उन गुणों पर इसका उपयोग करना होगा जो DataContext प्रॉपर्टी पर बाध्यकारी हैं, न कि DataContext प्रॉपर्टी।

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