سؤال

ما هي خاصية التبعية في .NET (خاصة في سياق WPF). ما هو الفرق من العقار العادي؟

هل كانت مفيدة؟

المحلول

خصائص التبعية هي خصائص الفئات التي تستمد من DependencyObject ، وهي خاصة في ذلك بدلاً من استخدام حقل دعم لتخزين قيمتها ، فإنهم يستخدمون بعض أساليب المساعد على DependencyObject.

أجمل شيء عنهم هو أن لديهم كل السباكة لربط البيانات المدمجة. إذا قمت بربط شيء لهم ، فسوف يخطرونه عند تغييرهم.

نصائح أخرى

التفسير الوحيد الذي وجدته مفيدًا ومكتوبًا جيدًا هو: http://www.wpftutorial.net/dependencyproperties.html

في الأساس ، تختلف DependencyProperties عن الخصائص العادية من حيث أنها ليست فقط المستوطنين / getters للحقول في الفصل ، ولكنها تسترجع قيمها الفعلية ديناميكيًا أثناء وقت التشغيل. ال SetValue() طريقة DPS واضحة إلى حد ما ويضع القيمة المحلية للخاصية على القيمة التي قدمتها لها. ومع ذلك ، عندما تحاول ذلك GetValue() من خلال التبعية ، سيبحث أولاً عن قيمة محلية ، إذا لم يكن أي منها موجودًا (وهو أمر قابل للتطبيق في DependencyProperties على عكس الخصائص العادية) ، فسيستمر في أعلى شجرة واجهة المستخدم المنطقية حتى تجد هذه القيمة. إذا كان الإطار قد وصل إلى الجزء العلوي من الشجرة دون العثور على أي قيم محلية ، فسوف يستخدم بعد ذلك القيمة الافتراضية المحددة مسبقًا كقيمة الخاصية.

تتيح هذه الطريقة REPENDENCEDPROPERTIES استهلاك ذاكرة أقل من الخصائص العادية حيث سيتم تخزين القيم التي تم تعيينها بشكل صريح من قبل المستخدم محليًا.

وكما ذكر أعلاه ، تتيح لنا RepencyProperties أيضًا ربطها في رمز XAML وتعيين المشغلات عليها ، والتي لا يُسمح بها في الخصائص العادية.

آمل أن أكون قد تمكنت من مسح بعض الغموض :)

http://techpunch.wordpress.com/2008/09/25/wpf-wf-hat-is-a-dependency-property/ يوفر شرحًا جيدًا لخصائص التبعية في سياق WF و WPF.

مقتطف:

النقطة الرئيسية - يتم حل قيمة خصائص التبعية

الهدف النهائي لعقار التبعية ، مثل أي خاصية ، هو إدارة الدولة. ولكن على عكس خصائص .NET العادية ، لا يتم تخزين قيمة الخاصية المحلية في متغير مثيل.

بدلاً من ذلك ، يتم تسجيل خصائص التبعية في إطار خاصية التبعية ، ويتم حل قيمة الخاصية الأساسية - وهذا يعني أن القيمة يتم تحديدها من خلال إطار خاصية التبعية بناءً على القواعد المحددة في تسجيل الممتلكات.

شرح بدون رمز عبر القياس (حوالي 5 دقائق)

إذا كنت لا تحب القصص ، فاحفظ نفسك (حوالي 5 دقائق)

سيتعين علينا أن نمر ببعض المفاهيم:

  • قيمة الدقة لأعلى وراثة قيمة الشجرة / الخصائص و
  • دعم متعدد المبرر
  • تغيير الإخطارات

(أ) دقة القيمة / الوراثة قيمة الخاصية

دعونا نستخدم مثال الجينات البشرية لشرح المفهوم.

الجميع أكثر أو أقل من نفس

البشر لديهم الكثير من المعلومات المرتبطة بهم. يرتبط عدد لا يحصى من المئات والآلاف من البيانات بك -

  • كم عدد الأصابع التي لديك ،

  • كم عدد أصابع القدم ،

  • كم عدد جينات BRCA2 لديك وما إلى ذلك

ما هي المشكلة التي نريد حلها؟

نريد أن نكون قادرين على إعطاء إجابات مباشرة للأشخاص الذين يسألوننا عن أنفسنا دون أن نتجول في كل هذه المعلومات.

لذا فإن السؤال هو: كيف يمكنك أن تتذكر كل ذلك؟ حسنًا ، بدأ الناس في الأصل في كتابة كل هذه الأشياء لأسفل ، لكن سرعان ما أدركوا أنهم سيحتاجون إلى حمل حوالي 10 مجلدات من الصفحات الصفراء - في الأساس مكتبة الإسكندرية بأكملها (بتنسيق نسخة ورقية) في جيبهم الخلفي لتكون قادرة على ذلك أجب على كل هذه الأسئلة: هذا هو الكثير من الأشياء التي يمكن أن تتجول.

الحل: تخزين المعلومات المشتركة في مكان واحد

لذلك كان لدى شخص ما فكرة مشرقة. لاحظوا أنه في معظم الوقت ، فإن المعلومات هي نفسها. على سبيل المثال ، لدى معظم الناس:

  • قلب واحد

  • وجه واحد وما إلى ذلك

  • ثلاثة جينات BRCA2

ليست هناك حاجة لكل شخص لحمل حوالي 30 رطلاً من الورق في جيبه الخلفي. يمكنك تخزين كل هذه المعلومات في مكان واحد, ، في مكتبة مركزية واحدة. سيكون الناس أحرارًا في التجول دون أن يحملوا هذه المعلومات حولها.

ولكن هناك دائمًا استثناءات .... ليس كل شخص لديه نفس نوع الدم ، أو نفس العدد من بصيلات الشعر على رأسهم. إذا كانت هناك اختلافات أو استثناءات من القاعدة ، فأنت ببساطة تحمل هذه الاستثناءات معك في جيبك الخلفي (أي في القاموس) ، بدلاً من الكتب على رف الكتب بالكامل. تذكر ، بالنسبة للجزء الأكبر ، أن الناس متماثلون إلى حد كبير - يشتركون في نفس القيم وهذا نادراً ما يتغير. إذا لم يكن لديك استثناءات مكتوبة في جيبك الخلفي ، فيمكنك ببساطة إحالة القائم بإجراء المقابلة إلى البيانات المخزنة في المستودع المشترك.

مثال: مقابلات مع مراسل الرئيس دونالد ترامب **

لنجرب هذا بمثال.

لدينا مثال للشخص: دونالد ترامب. يسأل مراسل الأخبار رئيسنا الموقر بعض الأسئلة:

"السيد الرئيس ترامب ، كم عدد جينات HIF1A لديك؟"

دون يتحقق جيبه الخلفي. لا يوجد شيء مدرج في عدد الجينات التي لديه. لذلك يخبر المراسل ببساطة أن لديه الرقم الافتراضي الذي يتمتع به أي شخص آخر. يقول ترامب: "مثل أي شخص آخر". "يمكنك العثور على إجابتك في المكتبة". لذلك يذهب المراسل ببساطة إلى المكتبة لمعرفة هذه التفاصيل المعينة.

السيد الرئيس ترامب ، كم عدد الوجوه التي لديك؟

هل يمكن حل هذه القيمة محليًا؟ يبدو أن هذه القيمة يتم حلها محليًا لأنه في جيب ترامب الخلفي يكمن الإجابة: 2 - الذي يتم إرجاعه على الفور إلى المراسل.

قيمة الدقة لأعلى شجرة

في الواقع ، تكون الأمور أكثر تعقيدًا بقليل من الإجابة إما في الجيب الخلفي ، أو في مكتبة مركزية. هناك العديد من الأماكن الوسيطة التي يمكن أن تخزن نفس المعلومات ، وبالتالي ، ستكون المرشحين المثاليين "لحل قيمة العقار". لذلك قد تبدأ الأمور في الجيب الخلفي ، فقد يتعين على المراسل التحقق من مجموعة كاملة من الأماكن الوسيطة ، بالترتيب الصاعد ، من أجل الحصول على الإجابة. على سبيل المثال ، قد يبدأ المراسل مع الصحف الأخرى ، ثم مستندات المحكمة ، وفشل كل ذلك ، إذا لم يتم العثور على إجابة ، فإن الإجابة هي القيمة الافتراضية الواردة في المكتبة المركزية.

لتبسيطها ، يتم حل الأمور أولاً مع الشخص ، ثم سلطات أعلى وأعلى لأعلى: في النهاية تنتهي مع الله أو وحش السباغيتي كما قد يكون الحال. في ذلك الوقت ، تستمر في الارتفاع وأعلى حتى تحصل على إجابة. في النهاية ، يتم حل جميع الإجابات.

ملخص

باختصار ، خاصية التبعية هي خاصية يتم حلها محليًا أو لأعلى شجرة واجهة المستخدم حسب الحالة. السبب في أننا نفعل ذلك هو أن عناصر واجهة المستخدم لديها مئات ومئات الخصائص التي ستأكل ذاكرتك قريبًا إذا كنت ستخزنها كحقول دعم لكل واحد منها. نظرًا لأن معظم هذه الحقول لا تتغير أبدًا أو نادرًا ما تتغير ، فليس هناك حاجة لتخزينها كحقول دعم ، ويمكن حل قيمها عن طريق رفع الشجرة.

أخيرًا ، تحصل على إشعار تغيير تلقائي مدمج مجانًا.

منحت ، القياس متوترة بعض الشيء ، لكنني آمل أن يكون مفيدًا.

** لا يزال ينتظر على الجدار (النار) ترامب وعد به. تحتاج إلى إبقاء الملحقات الساميية خارجًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top