टेम्प्लेट बाइंडिंग बनाम बाइंडिंग क्या है?


118

मैं समझ नहीं पाया BorderThickness="{TemplateBinding BorderThickness}। यहाँ कोड है:

<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
    <Border Padding="{TemplateBinding Padding}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            SnapsToDevicePixels="True">
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
</ControlTemplate>

कृपया अन्य प्रकार के बंधन के बारे में भी बताएं।


यह क्यों लौटा और क्यों बॉर्डरहिकनेस दो बार लिखते हैं "" "बॉर्डरटीनेस =" {टेम्प्लेटबाइंडिंग बॉर्डरहिकनेस} "" "
प्रांझी

1
@ यह पृष्ठ उस क्वेरी के लिए पहला Google परिणाम प्रतीत होता है। ;)
एवेज़

जवाबों:


204

टेम्प्लेट बाइंडिंग का उपयोग टेम्प्लेट परिभाषा के भीतर तत्व गुणों के लिए बाध्य करने के लिए किया जाता है। आपके उदाहरण में, आप लिख सकते थे

 <Border Padding="{Binding Padding}" ...>

सीमा की पैडिंग प्रॉपर्टी को ... की पैडिंग प्रॉपर्टी से बांधने का मतलब ... क्या? आप कहना चाहेंगे, "इस टेम्पलेट के लिए उपयोग की जा रही नियंत्रण की पैडिंग संपत्ति।" आप इसे एक नाम नहीं दे सकते क्योंकि आप x को नहीं जानते हैं: इस समय नियंत्रण का नाम (भले ही आपने किया हो, यह काम नहीं करेगा क्योंकि इसके अलग नाम में)। हालांकि, आप एक रिश्तेदार स्रोत को परिभाषित करके ऐसा कर सकते हैं

<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>

या टेम्प्लेटबाइंडिंग का उपयोग करें जो ऊपर के लिए एक शॉर्टकट (*) है

<Border Padding="{TemplateBinding Padding}" ...>

(*) इन टेम्प्लेटिंग परिदृश्यों में कम क्रिया होने के अलावा, टेम्पलेटबाइंडिंग में एक नियमित चरण की तुलना में कुछ अंतर हैं:

  • इसका संकलन-समय पर मूल्यांकन किया जाता है। (यदि, उदाहरण के लिए, पैडिंग प्रॉपर्टी मौजूद नहीं थी, तो आपको एक कंपाइल एरर मिलेगा। लेकिन अगर आप टेंपलेटेडपैरेंट के साथ बाइंडिंग का उपयोग करते हैं, तो आपको रनटाइम में केवल त्रुटि दिखाई देगी।)
  • यह हमेशा एक तरफ़ा बंधन होता है।
  • यह आवश्यक है कि स्रोत और लक्ष्य गुण दोनों निर्भरता गुण हैं
  • इसकी कार्यक्षमता बहुत कम है (कोई StringFormat, Delay, IsAsync, आदि .. बाइंडिंग बनाम टेम्प्लेटबाइंडिंगटेक्शंस के गुण देखें )।

58

एक तस्वीर एक हजार शब्दों के बराबर होती है। इस मामले में यह 7 मिनट का वीडियो है: https://www.youtube.com/watch?v=z-0TZR-7xLI

संपादित करें: उदाहरण:

  • A के Buttonपास डिफ़ॉल्ट ControlTemplateगुण और Heightसंपत्ति है
  • आप अपना स्वयं का लिखकर ControlTemplateसंपत्ति को ओवरराइड Buttonकरते हैं (उदाहरण के लिए Ellipse-looking के बजाय -looking बटन बनाना चाहते हैं Rectangle)
  • Ellipseआपके द्वारा अपने नए बनाने के बाद ControlTemplate, आप Ellipseमूल बटन की Heightसंपत्ति के समान आकार चाहते हैं
  • तो आप का उपयोग TemplateBindingसंदर्भ के लिए Button'एस Heightयह नामकरण के बिनायहां छवि विवरण दर्ज करें

जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो यहां उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
भार्गव राव

32

एरेन एर्समनमेन ने पहले ही इसे काफी अच्छी तरह से समझाया, लेकिन मैं इसे अवधारणा को बेहतर ढंग से समझने के लिए एक और परिप्रेक्ष्य देना चाहूंगा।

WPF में प्रत्येक नियंत्रण कमोबेश अपनी प्रस्तुति से अलग होता है। आप हमेशा नियंत्रण के टेम्पलेट को बदल सकते हैं और इसे पूरी तरह से अलग दिखा सकते हैं। एक बटन उदाहरण के लिए ControlTemplateकेवल एक ही Rectangleउदाहरण के साथ अपेक्षित के रूप में काम करता है । अब कभी-कभी यह आवश्यक है कि ControlTemplateवास्तव में नियंत्रण के तर्क वाले हिस्से के गुणों का उपयोग किया जाए। और TemplateBindingइसके लिए जो कुछ है वह सिर्फ यह बताता है कि ControlTemplate"नियंत्रण की इस संपत्ति का उपयोग करें जो हम दृश्य प्रस्तुति दे रहे हैं"। एक अच्छा उदाहरण Backgroundहर नियंत्रण पर संपत्ति है, इसका अपने आप में कोई अर्थ नहीं है, यह इसके द्वारा TemplateBindingबच्चे के नियंत्रण में इसका अर्थ प्राप्त करता है ControlTemplate

MSDN में अपने आप ही बाइंडिंग बहुत अच्छी बताई गई है । यह एक बहुत ही अच्छा धोखा पत्र है जो वास्तव में मेरे बगल में मेरी दीवार पर लटका हुआ है। यह उपलब्ध सभी अलग-अलग बाइंडिंग का एक अच्छा अवलोकन देता है।


6

से TemplateBinding मार्कअप एक्सटेंशन , TemplateBindingटेम्प्लेट की गई नियंत्रण पर कुछ अन्य उजागर संपत्ति के मूल्य के लिए एक नियंत्रण टेम्पलेट में एक संपत्ति के मूल्य को जोड़ता है। दूसरे शब्दों में, यह एक टेम्पलेट में बाध्यकारी मूल्यों के लिए है।

बाइंडिंग बाध्यकारी लक्ष्यों और डेटा स्रोतों की एक संपत्ति को जोड़ता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.