प्रश्न Linking DataContext with another property in WPF की निरंतरता के रूप में।डेटाकॉन्टेक्स्ट के लिए क्या है?
अनुसंधान के बहुत अंत में मैं बहुत पता लगाने के लिए हैरान था कि जब एक ऐसा ही कुछ लिखते हैं:
<Label Content="{Binding Path=Name}" />
DataContext
जिसके खिलाफ Content
संपत्ति आबद्ध है Label
नियंत्रण ही की है! तथ्य यह है कि यह अभी भी काम करता है निकटतम माता-पिता से DataContext मान की डिफ़ॉल्ट विरासत के कारण है।
लेकिन अगर आप इस लेबल एक कस्टम नियंत्रण में लिपटे है, और आपको लगता है कि नियंत्रण से DataContext
संपत्ति के लिए अपने डेटा के लिए बाध्य नहीं करना चाहते, तो आप और अधिक संभावना प्यार के लिए होगा:
<Controls:SearchSettings Settings="{Binding Path=Settings}" />
और आप यहाँ हैं। के लिए Label
के लिए के लिए DataContext
के रूप में DataContext
के रूप में Settings
सेट करने की आवश्यकता है, लेकिन आप नहीं कर सकते हैं, क्योंकि इससे Settings
संपत्ति का पुन: बाध्यकारी ट्रिगर होगा।
मैं विभिन्न स्रोतों का उपयोग कर बाध्यकारी गुण मिश्रण में समझ में नहीं आता: DataContext
, ElementName
द्वारा, आदि तो क्यों मैं कभी DataContext
का प्रयोग करेंगे?
हाय! विस्तृत उत्तर के लिए धन्यवाद। परंतु। जो मैं आपको पसंद नहीं करता उदाहरण यह है कि आप DataContext प्रॉपर्टी को बाध्य करते हैं। शायद मैं आपके उदाहरण में स्टैकपैनल को एक अलग नियंत्रण में निकाल दूंगा। यह समझ में आता है कि यदि डेटाकॉन्टेक्स्ट अपने माता-पिता के डेटाकॉन्टेक्स्ट का अलग-अलग हिस्सा है, है ना? और फिर मैं अपने उपयोगकर्ता नियंत्रण की डेटाकॉन्टेक्स्ट संपत्ति को बाध्य नहीं करता, बल्कि स्वयं-वर्णनात्मक नाम के साथ एक विशेष संपत्ति होगी। (मेरा मतलब है कि किसी विशेष नियंत्रण के लिए डेटा कॉन्टेक्स्ट क्या है? मुझे क्या पास करना चाहिए?) और यह चीजें जटिल हो गई हैं। [जारी रखने के लिए] –
जैसा कि मैं डेटाकॉन्टेक्स्ट संपत्ति को बाध्य नहीं करता, इसे मूल नियंत्रण से लिया जाएगा। जिसका अर्थ है कि मैं डेटाकॉन्टेक्स्ट के खिलाफ अपने कस्टम नियंत्रण में नियंत्रण को बाध्य करने में सक्षम नहीं हूं, सिर्फ इसलिए कि मुझे नहीं पता कि वहां क्या है (नियंत्रण नियंत्रित नहीं कर सकता कि इसका बच्चा कौन होगा, और डेटाकॉन्टेक्स्ट इसे प्राप्त करेगा)। समाधान डेटाकॉन्टेक्स्ट को अंदर से नियंत्रित करने के लिए सेट किया जा सकता है (उस विशेष संपत्ति से मूल्य का उपयोग करके)। [जारी रखने के लिए] –
लेकिन यह आपके नियंत्रण की बाध्यकारीता को तोड़ देगा, क्योंकि, जैसा कि आपने बताया है, 'Content = {बाइंडिंग नाम}' लिखा है, 'लेबल' डेटाकॉन्टेक्स्टनाम 'से जुड़ा हुआ है और लेबल' माता-पिता 'से नहीं है। DataContext.Name' जैसा कि मैं इसे करने की उम्मीद करता हूं। –