2009-07-15 11 views

उत्तर

195

टेम्पलेट बाइंडिंग बिल्कुल वही बात नहीं है। एमएसडीएन दस्तावेज़ अक्सर उन लोगों द्वारा लिखे जाते हैं जिन्हें सॉफ़्टवेयर सुविधाओं के बारे में मोनोसिलैबिक एसडीई को प्रश्नोत्तरी करना होता है, इसलिए बारीकियां बिल्कुल सही नहीं होती हैं।

टेम्पलेट बाइंडिंग का मूल्यांकन नियंत्रण टेम्पलेट में निर्दिष्ट प्रकार के विरुद्ध संकलन समय पर किया जाता है। यह संकलित टेम्पलेट्स के बहुत तेज त्वरण के लिए अनुमति देता है। बस टेम्पलेट बाइंडिंग में नाम फेंक दें और आप देखेंगे कि कंपाइलर इसे ध्वजांकित करेगा।

बाध्यकारी मार्कअप रनटाइम पर हल किया गया है। निष्पादित करने के लिए धीमे होने पर, बाध्यकारी उन संपत्ति नामों को हल करेगी जो टेम्पलेट द्वारा घोषित प्रकार पर दिखाई नहीं दे रहे हैं। धीरे-धीरे, मैं इंगित करूंगा कि बाध्यकारी संचालन के बाद से इसके प्रकार के रिश्तेदार एप्लिकेशन के सीपीयू से बहुत कम लेते हैं। यदि आप उच्च गति पर चारों ओर नियंत्रण टेम्पलेट्स को नष्ट कर रहे थे तो आप इसे देख सकते हैं।

अभ्यास के मामले में टेम्पलेट बाइंडिंग का उपयोग करें जब आप बाध्यकारी से डर नहीं सकते हैं।

+17

का उपयोग करना होगा, इसलिए मुख्य याद रखने के लिए सोचें: टाइम बनाम रनटाइम संकलित करें। यदि आप रनटाइम के दौरान इसे बदलने का प्रयास करते हैं तो टेम्पलेट बाइंडिंग काम नहीं करेगी। सही ? –

+2

यह भी ध्यान रखें कि टेम्पलेट बाइंडिंग के बजाए बाइंडिंग का उपयोग करके डिजाइन समय के दौरान आप जो देखते हैं उसके प्रभाव हो सकते हैं। कुछ कॉन्फ़िगरेशन में, {बाध्यकारी सापेक्ष स्रोत ...} का उपयोग करके बाध्य किए गए गुण डिज़ाइनर में दिखाई नहीं देंगे (हालांकि वे अभी भी रन टाइम के दौरान दिखाई देते हैं), लेकिन यदि आप {TemplateBinding ...} का उपयोग करने के लिए स्विच करते हैं तो उन गुणों का मूल्यांकन किया जाता है डिजाइन समय के दौरान। – lfalin

0

इन्हें उसी तरह उपयोग किया जाता है लेकिन उनमें कुछ अंतर होते हैं। यहाँ TemplateBinding प्रलेखन के लिए एक लिंक है: http://msdn.microsoft.com/en-us/library/ms742882.aspx

15

TemplateBinding TemplatedParent साथ बाइंडिंग के लिए एक आशुलिपि है लेकिन यह बाध्यकारी वर्ग के सभी क्षमताओं, उदाहरण के लिए आप TemplateBinding से Binding.Mode नियंत्रित नहीं कर सकते का खुलासा नहीं करता।

1

मैंने सोचा कि टेम्पलेट बाइंडिंग फ्रीजबल प्रकारों का समर्थन नहीं करता है (जिसमें ब्रश ऑब्जेक्ट्स शामिल हैं)। समस्या के आसपास पाने के लिए। कोई टेम्पलेटेड पेरेंट

18

का उपयोग कर सकता है एक और बात - टेम्पलेट बाइंडिंग वैल्यू कनवर्टिंग की अनुमति नहीं देती है। वे आपको कनवर्टर पास करने की अनुमति नहीं देते हैं और उदाहरण के लिए int को स्ट्रिंग में स्वचालित रूप से परिवर्तित नहीं करते हैं (जो बाइंडिंग के लिए सामान्य है)।

+1

धन्यवाद मिरोस्लाव, यह समस्या थी जिसे मैं सामना कर रहा था, टेम्पलेटेड पेरेंट का उपयोग करने के लिए स्विचिंग समस्या हल हो गई। – MikeKulls

27

TemplateBinding - अधिक नियमित रूप से उपयोग करते हुए

  • अधिक एक बाध्यकारी लेकिन यह है कम कार्यक्षमता
  • केवल एक ControlTemplate का दृश्य पेड़ के अंदर काम करता है की तुलना में कुशल बाइंडिंग से सीमित
  • पर गुणों के साथ काम नहीं करता फ्रीजबल्स
  • कंट्रोल टेम्पलेट के ट्रिगर
  • में काम नहीं करता है बसने में शॉर्टकट प्रदान करता है जी गुण (वर्बोज़ के रूप में नहीं), उदाहरण के लिए।{TemplateBinding targetProperty}

नियमित Binding - TemplateBinding की सीमाओं

  • का सम्मान करता है जनक गुण
  • पुनः निर्धारित करता है लक्ष्य मान किसी भी स्पष्ट रूप से सेट मूल्यों
  • उदाहरण बाहर खाली करने के लिए ऊपर नहीं है: < एलिप्स भरें = "{बाध्यकारी सापेक्ष स्रोत = {सापेक्ष स्रोत टेम्पलेटेड माता-पिता}, पथ = पृष्ठभूमि}"/>
2

RelativeSource TemplatedParent

यह मोड नियंत्रण कि ControlTemplate लिए आवेदन किया है की एक संपत्ति के लिए एक दिया ControlTemplate संपत्ति टाई सक्षम बनाता है। अच्छी तरह से यहां मुद्दा यह समझने के लिए

<Window.Resources> 
    <ControlTemplate x:Key="template"> 
     <Canvas> 
      <Canvas.RenderTransform> 
       <RotateTransform Angle="20"/> 
      </Canvas.RenderTransform> 
      <Ellipse Height="100" Width="150" 
        Fill="{Binding 
       RelativeSource={RelativeSource TemplatedParent}, 
       Path=Background}"> 

      </Ellipse> 
      <ContentPresenter Margin="35" 
         Content="{Binding RelativeSource={RelativeSource 
         TemplatedParent},Path=Content}"/> 
     </Canvas> 
    </ControlTemplate> 
</Window.Resources> 

<Canvas Name="Parent0"> 
    <Button Margin="50" 
       Template="{StaticResource template}" Height="0" 
       Canvas.Left="0" Canvas.Top="0" Width="0"> 
     <TextBlock FontSize="22">Click me</TextBlock> 
    </Button> 
</Canvas> 

अगर मैं अपने नियंत्रण टेम्पलेट के लिए दिए गए नियंत्रण के गुणों को लागू करने के तो मैं TemplatedParent मोड का उपयोग कर सकते हैं bellow एक उदाहरण है। इस मार्कअप एक्सटेंशन में भी ऐसा ही एक है जो टेम्पलेट बाइंडिंग है जो पहले के एक छोटे से हाथ का एक छोटा सा हाथ है, लेकिन टेम्पलेट बाइंडिंग का परीक्षण टेम्पलेटेड पेरेंट के विपरीत संकलन समय पर किया जाता है जिसका मूल्यांकन पहले रन के बाद किया जाता है। जैसा कि आप बोले आंकड़े में टिप्पणी कर सकते हैं, पृष्ठभूमि और सामग्री बटन के भीतर से नियंत्रण टेम्पलेट पर लागू होती है।

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