מדריך WPF

מדריך WPF – שימוש ב Dependency Properties

‏ • Sela

הקדמה

כפי שאתם יודעים, במחלקה בשפת #C ניתן להגדיר Properties (תכונות). כאשר פיתחו את WPF, עלה הצורך בProperties משוכללים, עם יכולות נוספות מעבר לProperties הרגילים. לProperties החדשים שפיתחו בWPF קוראים Dependency Properties.

כמעט כל Property שנמצאת בשימוש בWPF היא Dependency Property. בפרק זה נפרט את היתרונות בDependency Property. נעיר כי פרק זה הוא די תיאורטי, ברוב היתרונות אנחנו משתמשים רק בעקיפין ולא שמים לב שזה עובד רק בזכות Dependency Properties.

המטרה העיקרית של Dependency Property היא לספק דרך לחשב ערך של תכונה שמבוסס על מספר מקורות שונים. לדוגמא, לערך של תכונה FontSize של כפתור יכולים להיות מספר מקורות, למשל:

  • הגדרת גודל פונט במערכת ההפעלה
  • הגדרת גודל פונט של החלון הראשי (שיכולה לחלחל אל כל הפקדים שמתחתיו)
  • ערך שמגיע בעזרת Data Binding (ילמד בהמשך המדריך).
  • ערך שמגיע בעזרת אנימציה
  • ערך שמגיע בעזרת Style
  • ועוד..

 

יתרונות של Dependency Properties

  • שימוש יעיל בזיכרון ביחס לתכונות רגילות כאשר יש הרבה פקדים ולכל פקד יש מאות תכונות
  • מאפשר הצבה של ערך באמצעות DynamicResource (ילמד בהמשך המדריך)
  • מאפשר הצבה של ערך באמצעות Data Binding (ילמד בהמשך המדריך)
  • מאפשר הצבה של ערך באמצעות Animation
  • מאפשר קבלת ערך ע"י ירושת ערך מפקד אשר מכיל את הפקד הנוכחי
  • מספק דרך לקבלת הודעה (אירוע) כאשר הערך של התכונה משתנה

 

זיהוי Dependency Property

נשים לב כי Dependency Property לרוב נראה כמו Property רגיל מבחינת השימוש בו. הדרך הטובה ביותר לזהות שProperty מסוים הוא Dependency Property היא ע"י קריאת התיעוד של הProperty.

 

שימוש ב Dependency Property

כאמור, השימוש ב Dependency Property נעשה בצורה זהה לProperty רגיל, כלומר אם נרצה להציב ערך באמצעות XAML נוכל להשתמש בקוד מהצורה הבאה:

    <Button Width="100" />

שינוי ערך של Dependency Property באמצעות קוד #C נעשה גם כן כרגיל:

Button myButton = new Button();
myButton.Width = 100;

הגדרת Dependency Property במחלקה שלנו

רוב הזמן אנו רק נשתמש בDependency Properties ולא ניצור חדשים. למרות זאת, בואו נראה דוגמא של יצירת Dependency Property בשם Age מטיפוס int במחלקה משלנו. נעיר כי פירוט מעמיק יותר על Dependency Properties הוא מעבר לגבולות מדריך זה.

ראשית יש לוודא שהמחלקה שלנו יורשת באופן ישיר או עקיף מ DependencyObject. בנוסף יש צורך לבצע רישום לתכונה החדשה שלנו, וכן לחשוף Property רגיל שמאחורי הקלעים מביא את הערך באמצעות שימוש במנגנונים שמסופקים ע"י מערכת ה Properties של WPF. להלן הדוגמא המלאה:

using System.Windows;

namespace
DependencyPropertiesDemo
{
 
class Person : DependencyObject
  {
   
public int
Age
    {
     
get { return (int
)GetValue(AgeProperty); }
     
set { SetValue(AgeProperty, value
); }
    }

   
public static readonly DependencyProperty
AgeProperty =
       
DependencyProperty.Register("Age", typeof(int), typeof(Person), new UIPropertyMetadata(0));
  }
}

תגיות: , , , ,

arikp

אריק פוזננסקי הוא יועץ בכיר ומרצה בסלע. הוא השלים שני תארי B.Sc. במתמטיקה ומדעי המחשב בהצטיינות יתרה בטכניון. לאריק ידע נרחב בטכנולוגיות מיקרוסופט, כולל .NET עם C#, WPF, Silverlight, WinForms, Interop, COM/ATL, C++ Win32 ו reverse engineering.

תגובות בפייסבוק