2009-04-29 5 views
5

डुप्लिकेट की:अंतर

Why are DataContext and ItemsSource not redundant?


WPF में हम 2 तरीके

//CODE #1 
//WPF 
<ComboBox name="cmbItems" ItemSource={Binding} /> 

//C# 
cmbItems.DataContext = someList; 

किसी अन्य तरीके से ComboBox करने के लिए आइटम की सूची प्रदान कर सकते हैं, सीधे आवंटित आइटमसोर्स

//CODE #2 
//WPF 
<ComboBox name="cmbItems" ItemSource={Binding} /> 
//C# 
cmbItems. ItemSource = someList; 

दोनों उद्देश्य प्रदान करते हैं, लेकिन उपरोक्त स्निपेट में क्या अंतर है? और जो उपयोग करने के लिए अच्छा है?

+0

संभावित डुप्लिकेट [डेटाकॉन्टेक्स्ट और आइटमसोर्स अनावश्यक क्यों नहीं हैं के लिए सबसे अच्छा जवाब कौन है?] (Http://stackoverflow.com/questions/793340/who-has-the-best-answer-for-why- DataContext और ItemsSource-हैं-न-अनावश्यक) –

उत्तर

9

DataContext रूपों पर ज्यादातर प्रयोग किया जाता है, नियंत्रण आदि

एक ItemSource कि DataContext पर डेटा बाइंडिंग करने के लिए एक रिश्तेदार पथ है।

उदाहरण के लिए जब आप व्यक्ति के विवरण को संपादित करने के लिए एक फॉर्म बनाते हैं, तो डेटाकॉन्टेक्स्ट व्यक्ति होगा और फॉर्म पर अलग-अलग नियंत्रण प्रत्येक उस वस्तु पर एक अलग संपत्ति पर बंधे होंगे, उदाहरण के लिए नाम, जन्म तिथि, आदि।

2

दूसरे उदाहरण में आप आइटमसोर्स = {बाध्यकारी} छोड़ सकते हैं .. आप आइटम कोड को सीधे अपने कोड में किसी मान पर सेट कर रहे हैं .. आपको यहां बाध्यकारी की आवश्यकता नहीं होगी। अपने पहले उदाहरण में, आप DataContext निर्धारित करते हैं, और DataContext से फिर से इसे पुनः प्राप्त करने के लिए एक बाध्यकारी का उपयोग ..

लेकिन यह वास्तव में बात नहीं करता है .. दोनों विधियों के लिए अच्छा काम ...

मैं का उपयोग नियम के निम्नलिखित अंगूठे: यदि मेरे पास संग्रह उपलब्ध है, तो इसे कोड में पीछे सेट करें .. अगर मुझे संग्रह को बदलने की आवश्यकता है, तो इसे किसी प्रकार के बाध्यकारी मोड में सेट करें, ताकि मैं नौकरी करने के लिए एक IValueConverter का उपयोग कर सकूं ..