2013-08-16 4 views
6

में बाइंडिंग WPF बाइंडिंग का एक बेहतर समझ के लिए:शैलियाँ और WPF

<Style x:Key="myButton" TargetType="Button"> 
    <Setter 
    Property="Content" 
    Value="{Binding 
      RelativeSource={RelativeSource FindAncestor,AncestorType=My:Control}, 
      Path=Text}"> 
    </Setter> 
</Style> 

<Button Name="button1" Style="{StaticResource myButton}"></Button> 
<Button Name="button2" Style="{StaticResource myButton}"></Button> 

मैं कई बटन पर इस शैली का उपयोग करते हैं, मुझे लगता है शैली ही लोगों instantiated है। बाइंडिंग के लिए इसका क्या अर्थ है? क्या मेरे पास केवल एक बाध्यकारी है (यानी एक बाइंडिंग-ऑब्जेक्ट) और बटन 1 और बटन 2 इस बाध्यकारी-ऑब्जेक्ट का संदर्भ दे रहे हैं? यदि हां, तो बाइंडिंग का स्रोत कब और कैसे पहचाना जाता है जब बटन 1 और बटन 2 का उपयोग विभिन्न माई: कंट्रोल कंट्रोल के हिस्से के रूप में किया जाता है? इसके द्वारा मेरा मतलब स्रोत-वस्तु का संदर्भ स्रोत का मूल्य नहीं है? क्या कोई मुझे कुछ विनिर्देशों के लिए इंगित कर सकता है जहां यह कहा गया है?

उत्तर

2

मुझे लगता है शैली ही लोगों

हाँ, यहाँ है कि अपने कोड का उपयोग कर का सबूत है instantiated है

enter image description here

मैं है केवल एक बाध्यकारी (यानी एक बाध्यकारी-वस्तु) और बटन 1 और बटन 2 इस बाध्यकारी वस्तु का संदर्भ दे रहे हैं?

हां, चूंकि शैली बाध्यकारी रखती है और वस्तुएं समान हैं (शाब्दिक) तो बाध्यकारी एक जैसी होनी चाहिए।

enter image description here

यदि हां, तो कब और कैसे है पहचान बंधन जब Button1 और Button2 अलग मेरे हिस्से के रूप में उपयोग किया जाता है के स्रोत: नियंत्रण नियंत्रण?

जब: जब दृश्य पेड़ से FindAncestor

निर्दिष्ट कैसे नियंत्रण करने के लिए चलने से प्रदान की गई है बाइंडिंग मूल्यांकन किया जाता है: अब आप कार्यान्वयन विवरण के बारे में बात कर रहे हैं। जबकि मैं नहीं जानता कि वास्तव में कैसे काम करता है FindAncestor (एक तरह से देखने के लिए नेट परावर्तक के माध्यम से है), यह शायद का उपयोग करता VisualTreeHelper.GetParent(...)

संपादित करें:

BindingExpression वस्तु की Binding से बंधी नहीं है , लेकिन आप इसे आसानी से प्राप्त कर सकते हैं।

enter image description here

जैसी उम्मीद थी, दोनों बटन विभिन्न BindingExpression लेकिन एक ही Binding वस्तु है। BindingExpressionTarget से Source के साथ संबंध रखता है। इस मामले में, ResolvedSourceRelativeSource का उपयोग कर संपत्ति

enter image description here

+0

मैं एक दोस्त के लिए एक ही qestion पूछा खोजने के लिए की वजह से रिक्त है। उन्होंने समझाया कि बाइंडिंगएक्सप्रेस और बाइंडिंग-ऑब्जेक्ट के बीच एक अंतर है। स्टाइल में जो मैंने निर्दिष्ट किया है वह एक बाध्यकारी एक्सप्रेशन है। और चूंकि शैली केवल एक बार तुरंत चालू होती है, बाध्यकारी एक्सप्रेशन शायद भी है। तो दोनों बटन एक ही बाध्यकारी एक्सप्रेशन का संदर्भ देते हैं। निष्पादन के दौरान किसी बिंदु पर बाध्यकारी एक्सप्रेशन का मूल्यांकन किया जाता है और बाध्यकारी-वस्तु बनाई जाती है। इस सृजन प्रक्रिया में पेड़ में बटन की वर्तमान स्थिति के आधार पर FindAncestor का मूल्यांकन किया जाता है।अंत में प्रत्येक बटन का अपना और अलग बाध्यकारी-वस्तु होता है। – user1182735

+0

सामान्य रूप से यह स्पष्टीकरण आपकी व्याख्या को फिट करता है, लेकिन एक मामूली विस्तार के साथ। बाइंडिंग-ऑब्जेक्ट और बाइंडिंगएक्सप्रेस-ऑब्जेक्ट के बीच भेद। – user1182735

+1

दोनों बटन एक ही बाध्यकारी का संदर्भ देते हैं, लेकिन दोनों बटनों में समान 'बाध्यकारी एक्सप्रेशन' नहीं होगा क्योंकि 'बाइंडिंगएक्सप्रेस' में 'लक्ष्य'' के बारे में जानकारी शामिल है। – Shoe

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