تمام سوالات سوالات بدون پاسخ سوال بپرسید

گاهی اوقات دیده ام که گفته می شود برای اینکه امکان انقیاد در WPF وجود داشته باشد باید حتماً property مورد نظر DependencyProperty باشد و Property های معمولی نمی توانند قابلیت انقیاد داشته باشند. اما در الگوی MVVM گفته می شود که ViewModel باید از واسط INotifyPropertyChanged پشتیبانی کنه. سوال من این که چرا در مورد Property هایی که در ViewModel وجود داره نباید از DependencyProperty استفاده کرد؟

1 پاسخ

سلام در Data-Bindingد و شيء دخيل هستند: مقصد يا همان شيء بصري كه قرار است اطلاعات را نمايش دهد و منبع كه مي تواند يك مدل تجاري و مانند آن باشد منبع را مي توان يك خاصيت تعريف شده در اشياءNET. درنظر گرفت اما مقصد همواره بايد از نوع DependencyPropertyباشد. سه روش متفاوت انقياد داده ها وجود دارد OneTime: در اين حالت مقصد مقدار دهي شده و عمليات انقياد داده ها فراموش خواهد شد. بنابراين اگر احيانا تغييري در منبع داده ها صورت گيرد، در مقصد منعكس نخواهد گرديد OneWay:در اين حالت به ازاي هر بار تغيير منبع داده ها، مقصد نيز به روز رساني خواهد شد. بهترين حالت براي نمايش فقط خواندني اطلاعاتي است كه احتمال تغيير در منبع آن وجود دارد TwoWay : در اين حالت انقياد داده ها، اگر منبع تغيير كند بلافاصله تغييرات در مقصد نيز منعكس مي گردد و برعكس (براي مثال داد ههاي وارد شده در رابط گرافيكي كاربر برنامه، بلافاصله در منبع داده ها نيز تاثير داده شود). اما شايد اين سؤال پيش آيد كه رابط کاربری از کجا منوجه این تغییر میگردد براي انتشار آني و خودكار تغييرات در منبع داده ها به مقصد يا همان رابط گرافيكي كاربر برنامه، نياز است تا كلاس مدل مورد استفاده، اينترفيس استاندارد INotifyPropertyChanged را پياده سازي كند

فرمایشات آقای @مهدی فرزاد کاملاً صحیح است. در تکمیل این فرمایشات و در راستای سوال شما این مطلب را اضافه کنم که مقصد انقیاد حتماً باید DependencyProperty باشد ولی منبع انقیاد می تواند یا DependencyProperty باشد یا صفتی در کلاسی که واسط INotifyPropertyChanged را پیاده سازی کرده است. اگر شما توجه کرده باشید در ViewModel شما همیشه منبع انقیاد را دارید و مقصد انقیاد معمولاً صفاتی از کنترل ها هستند که در Veiw قرار داده می شوند. بنابراین صفات ViewModel که قرار است منبع انقیاد باشند، لازم نیست DependencyProperty باشند و اینکه ViewModel شما واسط INotifyPropertyChanged را پیاده سازی کند، کافیست.

(17 آوریل '12, 21:29) mostafa
toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery
آموزش برنامه نویسی
آموزش طراحی وبسایت
آموزش مدیریت وبسایت
آموزش جاوا Java
آموزش پایتون Python
آموزش سی شارپ C#‎
آموزش HTML و CSS
آموزش JavaScript جاوااسکریپت
آموزش jQuery جی کوئری
آموزش ساخت ربات تلگرام
آموزش برنامه‌نویسی PHP
آموزش برنامه‌نویسی اندروید
● آموزش‌های رایگان

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
  • ×137
  • ×37
  • ×2
  • پرسیده شده: 11 آوریل '12, 09:36
  • بازدید: 3,440 بار
  • آخرین بروزرسانی: 17 آوریل '12, 21:30

این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها