2010-11-30 17 views
11

MSDN says,केवल निर्भरता प्रॉपर्टी के साथ बाध्यकारी काम करता है?

  • प्रत्येक बंधन आम तौर पर इन चार घटक हैं: एक बाध्यकारी लक्ष्य वस्तु, एक लक्ष्य संपत्ति, एक बाध्यकारी स्रोत, और बाध्यकारी स्रोत का उपयोग करने के मूल्य के लिए एक पथ। उदाहरण के लिए, यदि आप एक कर्मचारी ऑब्जेक्ट का नाम संपत्ति के लिए एक पाठ बॉक्स की सामग्री को बाध्य करने के लिए चाहते हैं, अपने लक्ष्य वस्तु है पाठ बॉक्स, लक्ष्य संपत्ति पाठ संपत्ति है, उपयोग करने के लिए मूल्य है नाम, और स्रोत ऑब्जेक्ट कर्मचारी ऑब्जेक्ट है।

  • लक्षित संपत्ति एक निर्भरता संपत्ति होना चाहिए।

ऊपर अंश क्यों निम्नलिखित कोड काम करता है बताते हैं,

<TextBox Text="{Binding EmployeeName}"> 

यह काम करता है क्योंकि पाठ निर्भरता संपत्ति है। इस बिंदु तक, सबकुछ ठीक है!


मेरा प्रश्न है,

यदि लक्ष्य संपत्ति बाइंडिंग काम करने के लिए एक निर्भरता संपत्ति होना चाहिए, तो कैसे folllowing सेटर काम करता है? कृपया ध्यान दें कि मूल्य सेटर में निर्भरता संपत्ति नहीं है!

<Style TargetType="{x:Type TextBox}"> 
     <Setter Property="Text" Value="{Binding EmployeeName}"/> 
</Style> 

मैं इसके लिए एक व्याख्या है। लेकिन मुझे यकीन नहीं है कि यह सही है या नहीं। मुझे पहले इसे समझाएं, और फिर, यदि आप गलत हैं तो आप लोग मुझे सही करते हैं। :-)

मुझे लगता है, मूल्य की प्रकार के बाद से वस्तु, इसका मतलब है कि, यह किसी भी प्रकार की घटनाओं को पकड़ कर सकते हैं। यह बाध्यकारी प्रकार का एक उदाहरण भी हो सकता है। हालांकि, यह बाइंडिंग अभिव्यक्ति का मूल्यांकन (या हल करने) की प्रक्रिया में भाग नहीं ले सकता है, क्योंकि यह एक निर्भरता संपत्ति नहीं है। तो स्टाइल ऑब्जेक्ट बस बाध्यकारी मान का मूल्यांकन/समाधान किए बिना, सेटर से टेक्स्टबॉक्स तक इस बाध्यकारी ऑब्जेक्ट (जो मान रखता है) को स्थानांतरित करता है। इस तरह के ऊपर सेटर इस के बराबर हो जाता है:

Text="{Binding EmployeeName}" 

और अब के बाद से, पाठ निर्भरता संपत्ति है, यह बाध्यकारी मूल्य हल कर सकते हैं। तो यह पहली बार प्रकट होता है कि बाध्यकारी का लक्ष्य मूल्य है, लेकिन हकीकत में, पाठ बाध्यकारी का लक्ष्य है।

ऐसा लगता है कि सेटर एक डाकिया है, मूल्य स्वयं डाकिया का बैग है, बाध्यकारी उदाहरण (यानी मूल्य क्या है) एक पत्र है। पोस्टमैन (यानी सेटर) लक्ष्य को खोलने के लिए पत्र (यानी बाध्यकारी उदाहरण) को भेजता है (यानी टेक्स्ट प्रॉपर्टी), इसे खोलने के बिना, i।ई जानने के बिना पत्र (यानी कर्मचारी नाम) पत्र लेता है।

अगर मैं गलत हूं तो कृपया मुझे सही करें।

+0

क्या यह वास्तव में काम करता है? मैंने TreeViewItem शैलियों के साथ कुछ ऐसा करने की कोशिश की, लेकिन ऐसा नहीं हुआ। –

+0

सिल्वरलाइट में, मेरा मतलब है। डब्ल्यूपीएफ शैलियों में बाध्यकारी निर्धारण का समर्थन करता है। –

+0

@Lex Lavnikov .... मैंने हाल ही में सिल्वरलाइट में खुद को नहीं देखा, मुझे याद नहीं है कि मैंने चांदी की शैली में बाध्यकारी उपयोग किया है या नहीं। वैसे भी, आप इस पर चर्चा करने के लिए एक और धागा शुरू कर सकते हैं। आपका क्या कहना है? – Nawaz

उत्तर

4

एक्सएएमएल Setter.Value को Binding के ऑब्जेक्ट पर सेट कर रहा है। Style इस प्रकार बनाया गया है तो उस Binding पर लक्षित ऑब्जेक्ट पर Text निर्भरता गुण सेट करता है, ताकि बाध्यकारी Text अपडेट हो जाए जब भी स्रोत प्रॉपर्टी बदलती है।

यदि Setter.Value एक निर्भरता संपत्ति थी, तो सेटटर संपत्ति-परिवर्तन अधिसूचना में मध्यस्थ होने के समाप्त हो जाएगा: स्रोत संपत्ति में परिवर्तन, बाध्यकारी सेटटर को सूचित करता है, सेटटर लक्ष्य को सूचित करता है। चूंकि यह सिर्फ एक सीएलआर संपत्ति है, इसलिए सेटटर वास्तव में परिवर्तन अधिसूचना में शामिल नहीं है: स्रोत संपत्ति में परिवर्तन और बाध्यकारी लक्ष्य को सूचित करता है।

+0

... प्रतिक्रिया के लिए धन्यवाद .. दूसरा पैराग्राफ अद्भुत है .. जो मुझे सही समझ में आता है .. :-) – Nawaz

2

यह सही है। यदि आप WPF toolkit नियंत्रणों के स्रोत कोड को देखते हैं तो आप देख सकते हैं कि यह कैसे किया जाता है। डेटाग्रिड इसे कुछ स्थानों में करता है (उदाहरण के लिए सेल पर बाध्यकारी सामग्री को पारित करने वाले विशिष्ट कॉलम)। मैं एक विशिष्ट फ़ाइल और रेखा के लिंक जोड़ने के लिए याद रखूंगा जहां यह काम के बाद किया जाता है।

संपादित एक अच्छा उदाहरण DataGridBoundColumn कक्षा में Binding संपत्ति है। आप इसे

internal void ApplyBinding(DependencyObject target, DependencyProperty property) 

आप WPF बनाने के लिए उन्नत पैटर्न में रुचि रखते हैं में प्रयोग किया जाता देख सकते हैं और सिल्वरलाइट मैं अत्यधिक उनके संबंधित उपकरणकिटें के माध्यम से देख की सिफारिश नियंत्रित करता है। वे सामान्य रूप से अच्छी तरह से टिप्पणी कर रहे हैं और कुछ नियंत्रण कुछ ठंडा कोड का उपयोग कर रहे हैं।

+0

में ठीक किया जाएगा ... प्रतिक्रिया के लिए धन्यवाद ... मैं डेटाग्रिड के स्रोत कोड को देखूंगा .. यह मेरे लिए बहुत दिलचस्प लगता है .. :-) – Nawaz

+0

.. और हाँ .. यह अच्छा होगा अगर आप मुझे बताए गए विशिष्ट फ़ाइल और लाइनें बताते हैं .. :-) – Nawaz

+0

.. इस मूल्यवान अद्यतन के लिए धन्यवाद .. :) – Nawaz

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