एक निर्भरता संपत्ति क्या है?


136

.Net में एक निर्भरता संपत्ति क्या है (विशेषकर WPF संदर्भ में)। नियमित संपत्ति से क्या अंतर है?

जवाबों:


94

डिपेंडेंसी गुण उन वर्गों के गुण हैं जो डिपेंडेंसीओबजेक्ट से निकलते हैं, और वे विशेष रूप से इसमें हैं कि वे अपने मूल्य को स्टोर करने के लिए एक बैकिंग फ़ील्ड का उपयोग करने के बजाय, वे डिपेंडेंसीऑब्जेक्ट पर कुछ सहायक तरीकों का उपयोग करते हैं।

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


36
यह अब भी मुझे बहुत कम बताता है कि एक निर्भरता संपत्ति क्या कर सकती है, या यह क्यों मौजूद है। आप उनकी सबसे मूल्यवान संपत्ति का कुछ भी उल्लेख नहीं करते हैं, तत्व पेड़ का मूल्य संकल्प।
प्रोफक

hi @Matt Hamilton ने आपके उत्तर के लिए धन्यवाद दिया - लेकिन आपका क्या मतलब है "वे DependencyObject पर कुछ सहायक तरीकों का उपयोग करते हैं?"
बीकेएसपूर्जन

2
@BKSpurgeon DependencyObject में "SetValue" और "GetValue" जैसे कुछ तरीके हैं, जिन्हें आप बैकिंग क्षेत्र का उपयोग करने के बजाय एक निर्भरता संपत्ति के मूल्य को बचाने / पढ़ने के लिए कहते हैं।
मैट हैमिल्टन

91

एकमात्र व्याख्या जो मुझे उपयोगी और अच्छी तरह से लिखी गई थी वह यह है: http://www.wpftutorial.net/dependencyproperties.html

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

यह विधि नियमित रूप से गुणों की तुलना में कम स्मृति का उपभोग करने के लिए DependencyProperties की अनुमति देती है क्योंकि उपयोगकर्ता द्वारा स्पष्ट रूप से निर्धारित किए गए मान केवल स्थानीय रूप से संग्रहीत किए जाएंगे।

और, जैसा कि ऊपर बताया गया है, DependencyProperties हमें XAML कोड में उन्हें बांधने और उन पर ट्रिगर सेट करने की भी अनुमति देता है, जो नियमित गुणों पर अनुमति नहीं है।

मुझे उम्मीद है कि मैं कुछ अस्पष्टता को दूर करने में कामयाब रहा हूं :)


2
और एक "संलग्न संपत्ति" क्या है?
पॉल-सेबस्टियन मैनोल

12
संलग्न संपत्ति एक ऐसी संपत्ति है जो वर्तमान आइटम से संबंधित नहीं है जिसे घोषित किया जा रहा है, लेकिन किसी अन्य वस्तु को प्रभावित करता है। उदाहरण के लिए: Grid.Row="1"एक Buttonयह माता पिता पर पंक्ति # 2 में होना तय करेंगे Grid(जो पंक्तियाँ हैं तथ्य के कारण शून्य आधारित) लेकिन RowDependencyProperty के अंतर्गत आता है Gridवस्तु।
जोनाथन पेरी

2
जब आपने कहा DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed, क्या आपका मतलब XAML में बाइंडिंग और ट्रिगर सेट करने या ट्रिगर्स सेट करने की अनुमति नहीं है। अनुवर्ती और चीजों को स्पष्ट करने में मदद करने के लिए धन्यवाद!
पॉल-सेबेस्टियन मैनोल

@ पॉल- सेबस्टियन मैनोल डेटाटाइगर नियमित गुणों पर भी काम करते हैं। मान लीजिए कि आपकी एक है का कहना है कि Value0 मान संपत्ति (नहीं डीपी) और आप अपने दृश्य में कुछ करने की जब चाहते हैं Value1. में परिवर्तन आप का उपयोग कर ऐसा करने के लिए सक्षम हो जाएगा DataTriggerऔर सेटिंगBinding={Binding Path=Value, Value=1}
जोनाथन पेरी

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-d dependency-property/ निर्भरता गुणों की एक अच्छी व्याख्या दोनों को WF और WPF के संदर्भ में प्रदान करता है।

अंश:

मुख्य बिंदु - निर्भरता गुणों का मूल्य हल किया जाता है

किसी भी संपत्ति की तरह एक निर्भरता संपत्ति का अंतिम लक्ष्य, राज्य का प्रबंधन करना है। लेकिन सामान्य .Net गुणों के विपरीत, स्थानीय प्रॉपर्टी वैल्यू को एक इंस्टेंस चर में संग्रहीत नहीं किया जाता है।

इसके बजाय, निर्भरता गुणों को निर्भरता संपत्ति ढांचे के साथ पंजीकृत किया जाता है, और अंतर्निहित संपत्ति मूल्य हल किया जाता है - जिसका अर्थ संपत्ति पंजीकरण द्वारा परिभाषित नियमों के आधार पर निर्भरता संपत्ति ढांचे द्वारा निर्धारित किया जाता है।

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