2009-05-26 14 views

उत्तर

48

मुझे लगता है कि आप निर्भरता प्रॉपर्टी का मतलब है। रजिस्ट्रार और निर्भरताप्रॉपर्टी। रजिस्ट्रार।

निर्भरताप्रॉपर्टी। रजिस्ट्रार सामान्य निर्भरता प्रॉपर्टी पंजीकृत करने के लिए उपयोग किया जाता है। आप उन्हें नियमित गुणों के रूप में देख सकते हैं, जो जोड़ा गया मोड़ है कि वे डब्ल्यूपीएफ के डेटा बाइंडिंग, एनीमेशन इत्यादि में भाग ले सकते हैं। वास्तव में, वे अनियमित निर्भरता ऑब्जेक्ट के शीर्ष पर सामान्य संपत्ति (प्राप्त करने और सेट एक्सेसर्स के साथ) के रूप में सामने आते हैं। SetValue/GetValue। आप उन्हें अपने प्रकार के हिस्से के रूप में घोषित करते हैं।

दूसरी ओर संलग्न संपत्तियां अलग-अलग हैं। वे एक विस्तारशील प्रणाली के रूप में हैं। यदि आपने कभी भी विंडोज फॉर्म में विस्तारकों का उपयोग किया है, तो वे समान हैं। आप उन्हें किसी अन्य प्रकार के उपयोग के लिए एक प्रकार के हिस्से के रूप में घोषित करते हैं।

वे लेआउट से संबंधित जानकारी के लिए बहुत उपयोग किए जाते हैं। उदाहरण के लिए, कैनवास को बाएं/शीर्ष निर्देशांक की आवश्यकता होती है, ग्रिड को एक पंक्ति और कॉलम की आवश्यकता होती है, डॉकपैनल को डॉक सूचना आदि की आवश्यकता होती है। यदि यह सब कुछ नियंत्रण पर किया जाना चाहिए, तो यह सब गड़बड़ होगी। इसलिए उन्हें संबंधित पैनल पर घोषित किया जाता है, लेकिन किसी भी नियंत्रण पर उपयोग किया जाता है।

यदि आप की आवश्यकता है तो आप निर्भरता ऑब्जेक्ट को किसी भी जानकारी को संलग्न करने के लिए एक ही चीज़ का उपयोग कर सकते हैं। यह केवल उस जानकारी का एक टुकड़ा घोषित करने में आसान हो सकता है जिसे आप xaml में सेट कर सकते हैं, उदाहरण के लिए बाद में मौजूदा वर्ग के लिए शैली में उपयोग किया जा सके।

तो उन दो तरह की निर्भरता प्रॉपर्टी एक बहुत ही अलग उद्देश्य प्रदान करती है। नियमित गुण (रजिस्टर() के माध्यम से पंजीकृत) आपके प्रकार के इंटरफ़ेस के हिस्से के रूप में सामान्य गुणों की तरह उपयोग किए जाते हैं। संलग्न गुण (RegisterAttached() के माध्यम से पंजीकृत) मौजूदा वर्गों पर एक विस्तारशीलता बिंदु के रूप में उपयोग किया जाता है।

आशा है कि यह थोड़ा सा स्पष्ट करे।

+1

तो देते हैं वर्गों है कि आप आपके पास नहीं हैं गुण जोड़ने के लिए इस्तेमाल किया जा सकता? क्या यह अंतर है? – Vaccano

+0

आपको बहुत बहुत धन्यवाद! –

+2

आप निर्भरता गुण सेट कर सकते हैं जो ** अन्य ** अन्य गुणों पर संलग्न गुण नहीं हैं: 'this.button.SetValue (TextBox.TextProperty," text "); '(जहां' this.button' प्रकार' सिस्टम है। Windows.Controls.Button')। यह बिल्कुल ठीक है इसलिए जवाब काफी पूरा नहीं है। इसके लिए और भी होना चाहिए। – bitbonk

9

क्या आपका मतलब DependencyProperty.Register() और DependencyProperty.RegisterAttached() है, मौका से? एमएसडीएन एक निर्भरताप्रोपर्टी सूचीबद्ध नहीं करता है। एटैच() या निर्भरता प्रॉपर्टी। एटैच पंजीकृत()।

निर्भरताप्रॉपर्टी के बीच का अंतर। रजिस्ट्रार() और निर्भरता प्रॉपर्टी। रजिस्ट्रार एटैच() वह है। रजिस्ट्रार() का उपयोग निर्भरता ऑब्जेक्ट पर 'नियमित' निर्भरता संपत्ति को पंजीकृत करने के लिए किया जाता है, जबकि। रजिस्ट्रार एटैच() को 'संलग्न' सेट करने के लिए उपयोग किया जाता है निर्भरता संपत्ति।

दो प्रकार की निर्भरता गुणों के बीच अंतर उचित रूप से सरल है: नियमित निर्भरता गुण किसी विशेष निर्भरता पर सेट होते हैं जैसे कि आप किसी भी अन्य .NET संपत्ति की तरह। दूसरी ओर, संलग्न गुण एक विशेष निर्भरता ऑब्जेक्ट (उदाहरण के लिए ग्रिड) से जुड़े होते हैं, लेकिन पूरी तरह से अलग निर्भरता ऑब्जेक्ट पर सेट होते हैं, अक्सर निर्भरता का एक बच्चा जो संलग्न संपत्ति को परिभाषित करता है (उदाहरण के लिए ग्रिड.रो, एक संलग्न संपत्ति, सेट है माता-पिता ग्रिड के बच्चों पर)।

संलग्न गुणों are on MSDN पर अधिक जानकारी।

3

या तो रजिस्टर या रजिस्टर के साथ पंजीकृत एक संपत्ति SetValue और GetValue के साथ किसी भी निर्भरता ऑब्जेक्ट से जुड़ी हो सकती है। लेकिन अगर आप रजिस्टर के साथ पंजीकृत एक संपत्ति को मालिक टाइप के अलावा किसी अन्य प्रकार की ऑब्जेक्ट में संलग्न करते हैं, तो इसका मेटाडेटा उपयोग नहीं किया जाएगा (डिफ़ॉल्ट मान को छोड़कर)। इसका मतलब है कि इनहेरिट्स या एफफेसमेयर जैसे गुण इन गुणों के लिए काम नहीं करेंगे। यदि आप संलग्न गुणों पर मेटाडेटा में रूचि रखते हैं तो आपको RegisterAttached का उपयोग करना चाहिए।

जानकारी के लिए, एक ऐसी ही सवाल का मेरा उत्तर देखें: Difference between Attached and non-Attached Dependency Properties in Silverlight

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