View Full Version : DependencyProperty
masoud.try
سه شنبه 17 دی 1392, 15:36 عصر
سلام.خسته نباشید.
من تازه wpf رو شروع کردم.
کسی میتونه در مورد DependencyProperty یه توضیحی بده که چی هست؟!
ممنون.
امید خطیبی
سه شنبه 17 دی 1392, 17:37 عصر
با سلام خدمت دوست عزیز و گرامی
دوست عزیز شما اگر مقداری جستجو می کردی به نتیجه می رسیدید ولی با این حال برای شما می گذارم
Dependency Property و Proprty هر دو این ها با هم مشابه هستند
هر دو برای نگهداری داده ها استفاده می شوند و نحوه ی مقداردهی و مقدارگیری از آنها مشابه است. اما در عمل تفاوت های بسیاری با یکدیگر دارند.
DP ها از نظر Performance بسیار ضعیف تر از Propertyهای معمولی هستند و اگر تنها قصد نگهداری داده ها را دارید توصیه اکید میشود که از Propertyها استفاده نمایید.
DPها قابلیت های بسیار بیشتری را در اختیار ما قرار می دهند و ما را قادر می سازند از بسیاری امکانات استفاده نماییم. به عنوان مثال: انیمیشن، استایلینگ، مقید سازی داده ها و ...
DPها می توانند مقادیر خود را بر مبنای ورودی های دیگر محاسبه نمایند. این ورودی ها می توانند هرچیزی باشند. به عنوان مثال در بحث Triggerها، یک DP می تواند برمبنای تغییر یک خاصیت دیگر، مقدار خود را تنظیم کرده و آن رفتاری را از خود بروز دهد که شما انتظار دارید.
در موارد زیر شما بایستی از DPها استفاده نمایید:
زمانی که می خواهید خاصیت شما قابل مقدار دهی در Styleها و Templateها باشد.
زمانی که می خواهید خاصیت شما قابل استفاده در Data Bindings باشد(از تمام قابلیت های مقید سازی داده ها استفاده کنید).
زمانی که می خواهید خاصیت شما به صورت اتوماتیک بتواند مقدار خودش را از مقدار والد خود ارث بری کند.(با ارث بری کلاس ها اشتباه نشود)
زمانی که می خواهید از خاصیت خود در متحرک سازی استفاده نمایید. هنگامی که نیاز دارید مقادار خاصیت شما در یک پروسه انیمیشنی قابل کنترل باشد.
تعریف Propertyها به این صورت است:
private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } }
یا
public int MyProperty { get; set; }
تعریف Dependency Propertyها چهار بخش دارد اما لزومی ندارد که از تمام آنها استفاده کرد:
تعریف متا دیتا برای خاصیت. این مرحله اختیاری می باشد و میتوان در تعریف از مقدار null استفاده کرد.
تعریف یک فیلد با امضای readonly public static به عنوان شناسه خاصیت. این فیلد بایستی از نوع Dependency Property باشد.
ثبت کردن خاصیت در سیستم WPF توسط متد Register.
ایجاد یک Wrapper برای خاصیت که همنام با خاصیت باشد.
masoud.try
چهارشنبه 18 دی 1392, 12:01 عصر
یه سوال دیگه!
چه جوری میشه قبل از نسبت دادن مقدار بهش,مقدارشو چک کرد ؟
(اگه ممکنه به نمونه کد.ممنون)
Boy_nn
چهارشنبه 18 دی 1392, 13:22 عصر
private int _id;
public int Id
{
get
{
return _id;
}
set
{
if (value > 0)
_id = value;
}
}
مقدار value مقداری هست که به پراپرتی نسبت داده میشه هر کنترلی خواستی می تونی روش انجام بدی
در ضمن ابن یک پراپرتی هست که با DependencyProperty فرق داره
DependencyProperty رو میشه در xml مقدار داد و باهاش کار کرد ولی Property این خاصیت رو نداره و فقط در محیط C# میشه باهاش کارکرد
همین طور میشه پراپرتی رو به صورت اتو پراپرتی هم تعریف کرد این در صورتی هست که نخواهی موقع دریافت و یا ارسال اطلاعات کار خاصی انجام بدی
public int Id { get; set; }
masoud.try
چهارشنبه 18 دی 1392, 13:46 عصر
private int _id;
public int Id
{
get
{
return _id;
}
set
{
if (value > 0)
_id = value;
}
}
مقدار value مقداری هست که به پراپرتی نسبت داده میشه هر کنترلی خواستی می تونی روش انجام بدی
در ضمن ابن یک پراپرتی هست که با DependencyProperty فرق داره
DependencyProperty رو میشه در xml مقدار داد و باهاش کار کرد ولی Property این خاصیت رو نداره و فقط در محیط C# میشه باهاش کارکرد
همین طور میشه پراپرتی رو به صورت اتو پراپرتی هم تعریف کرد این در صورتی هست که نخواهی موقع دریافت و یا ارسال اطلاعات کار خاصی انجام بدی
public int Id { get; set; }
واسه ست کردن dp ها تا اونجا که من میدونم با getvalue و setvalue امکان پذیره و نمیشه چیزی رو توش چک کرد!
Boy_nn
چهارشنبه 18 دی 1392, 15:52 عصر
چرا میشه همه کار توش میشه کرد
موقع تعریف میشه هر جور که خواستی چک کنی محدودیت خاصی نداره البته اون مثال بالا به هیچ وجه DependencyProperty نیست
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.