نمایش نتایج 1 تا 8 از 8

نام تاپیک: DependencyProperty

  1. #1
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    DependencyProperty

    سلام

    یه مشکل اساسی پیدا کردم که فقط در مورد DependencyProperty ها وجود داره و نه Property های معمولی!

    DependencyProperty ها به صورت public و static داخل کلاس تعریف میشن و یه Property غیر استاتیک به صورت Wrapper عمل میکنه و با متد های GetValue و SetValue مقدار دهی و خواندن مقدار از DependencyProperty رجیستر شده رو انجام میده...

    چون DependencyProperty ها به صورت استاتیک هستند پس از طریق نمونه(Instance) به صورت مستقیم قابل دسترسی نیستند اما خاصیت غیراستاتیکی که به صورت Wrapper عمل میکنه به DependencyProperty به شرحی که در بالا گفتم دسترسی داره. پس اگر یه کلاس مثل Button یه خاصیت وابستگی مثل IsDefaultProperty و یه Wrapper مثل IsDefault داشته باشه و دو شی از Button داشته باشیم و اگر خاصیت IsDefault مربوط به اولی رو True کنیم باید این خاصیت در دومی نیز True بشه(که البته منطقی نیست و این طور هم نمیشه) اما چون خاصیت IsDefault نهایتا در DependencyProperty استاتیک IsDefaultProperty ذخیره میشه باید به ازای هر چند تا شی از Button فقط یک و فقط یک مقدار IsDefault داشته باشیم. در واقع باید این مقدار بین همشون share باشه. ولی اینطور نیست


    لطفا این موضوع رو مثل من تست کنین.

    دلیلشو نفهمیدم!

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: DependencyProperty

    متاسفانه نشد تو این سایت جواب حتی فقط یکی از سوالاتمو بگیرم!
    سوال که یکم مفهومی میشه متاسفانه کسی نیست!
    پاسخ دادن به اینجور سوالا فقط از آقای وحید نصیری بر میاد که دیگه اینجا نمیان!

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    آذر 1387
    محل زندگی
    تهران
    پست
    848

    نقل قول: DependencyProperty

    میشه بر اساس این کد توضیح دهید چرا باید اتفاقی که می گویید رخ دهد ؟
    به قسمت های Bold شده دقت کنید
    در نهایت مقادیر در Instance ها قرار می گیرند، و Dependency Property ها فقط در خواندن و بالاخص در نوشتن مقادیر به نحوی عمل می کنند که Binding های Xaml سرعت عملکرد خوبی داشته باشند
    همین
    public class MyStateControl : ButtonBase
    {
    public MyStateControl() : base() { }
    public Boolean State
    {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); }
    }
    public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
    "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
    }

    هر توضیحی لازم هست من در خدمت شما هستم (-:

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: DependencyProperty

    ممنون بابت جوابتون

    مشکل من همچنان حل نشده باقی مونده!

    وقتی شما SetValue انجام میدین مقدار value در متغیر استاتیک StateProperty ذخیره میشه که این متغیر بین تمامی نمونه های MyStateProperty باید share باشه ولی نمیشه. سوالم اینه که چرا نمیشه؟

    اگه این متغیر از نوع DependencyProperty نباشه و Property استاتیک معمولی باشه در این صورت مثل گفته من عمل میکنه.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: DependencyProperty

    سلام دوست عزیز
    اون DependencyProperty که static هست، برای نگهداری اطلاعات Property شما نیست. و فرمان this.SetValue اگه توجه کنید، با this شروع می‌شه که محل نگهداری مقدار Property هست.
    پس طبیعی هست که مقداری که مثلا به IsDefault یک دکمه اختصاص می‌دین، به دکمه دیگه ارتباطی نداره.
    امیدوارم که پاسخ خودتون رو گرفته باشین.

    صبا صبوحی

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: DependencyProperty

    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    سلام دوست عزیز
    اون DependencyProperty که static هست، برای نگهداری اطلاعات Property شما نیست. و فرمان this.SetValue اگه توجه کنید، با this شروع می‌شه که محل نگهداری مقدار Property هست.
    پس طبیعی هست که مقداری که مثلا به IsDefault یک دکمه اختصاص می‌دین، به دکمه دیگه ارتباطی نداره.
    امیدوارم که پاسخ خودتون رو گرفته باشین.

    صبا صبوحی
    اینطور که شما گفتین نیست! کلمه this نشون میده که متدهای SetValue و GetValue مربوط به Instance های Button هست اما همین متدهای Instance در نهایت با نوع استاتیک IsDefaultProperty کار میکنن.

    جواب هر چیه برمیگرده به DependencyProperty نه چیزی که شما میگین

    خیلی راحت میتونین اینو تست کنین: کافیه DependencyProperty رو به Property معمولی تبدیل کنید تا بوضوح ببینید که مقادیر Set شده بین تمامی نمونه ها Share میشن.

    پاسخ سوالمو تو StackOverflow پیدا کردم و تا حدودی فهمیدم اما هنوز درک عمیقی پیدا نکردم. اگه بهتر متوجه شدم اینجا هم میزارم


    درک عمیق DependencyProperty کار ساده ای نیست و حتی Mathew McDonald هم با اینکه کتابش قویه گفته بحث کامل این نوع پراپرتی ها پیچیده ست و خارج از اسکوپ این کتابه. استفاده از این DP ها ساده ست اما تو پس این ظاهر ساده مفاهیم پیچیده ای وجود داره که تا درک نشن سوال من رو نمیشه جواب داد!

  7. #7
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: DependencyProperty

    با سلام
    دوست عزیز، من هم که همین رو گفتم. منظور من از محل نگهداری همان نمونه تولید شده یا instance بود.

    صبا صبوحی

  8. #8
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: DependencyProperty

    محل نگهداری نهایتا متغیر استاتیک IsDefaultProperty هست که باید بین تمامی نمونه ها Share باشه ولی در مورد DependencyProperty ها اینطور نیست و دلیلشو درک نکردم هنوز!

تاپیک های مشابه

  1. حرفه ای: DependencyProperty از نوع Control
    نوشته شده توسط i.lover3000 در بخش WPF
    پاسخ: 0
    آخرین پست: سه شنبه 01 فروردین 1391, 00:35 صبح
  2. اجرا نشدن PropertyChangedCallback در DependencyProperty
    نوشته شده توسط niloo17 در بخش WPF
    پاسخ: 2
    آخرین پست: شنبه 09 مهر 1390, 07:58 صبح
  3. مشکل با DependencyProperty
    نوشته شده توسط sinaone1 در بخش WPF
    پاسخ: 2
    آخرین پست: شنبه 04 تیر 1390, 15:22 عصر
  4. سوال: DependencyProperty
    نوشته شده توسط omidjadidolislam در بخش C#‎‎
    پاسخ: 0
    آخرین پست: پنج شنبه 29 مرداد 1388, 18:29 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •