ورود

View Full Version : ObservableCollection یا ReadOnlyObservableCollection



mze666
سه شنبه 12 دی 1391, 12:35 عصر
سلام. من توی پروژم برای نشون دادن لیستی از مشتری ها داخل دیتاگرید از ObservableCollection استفاده می کنم. توی دیتاگرید مشتری ها رو تغییر نمیدم (ویرایش، افزودن) یعنی این کار ها در یک پنجره جداگانه انجام میشه. توی این حالت تغییرات درست نشون داده میشه.

حالا وقتی ReadOnlyObservableCollection هم استفاده می کنم باز هم همه چیز درسته و تغییرات رو به محض انجام نشون میده.

می خواستم بدونم آیا این رفتار درسته یا من جایی اشتباه کردم؟

ghabil
جمعه 15 دی 1391, 06:07 صبح
دوست عزیز اگر درست متوجه شده باشم منظورت اینه که وقتی اطلاعات مشتری رو ادیت میکنی تغییرات نشون داده نمیشه. اگر اینطور هست باید دقت کنی که آبزوبل کالکشن فقط برای تغیررات ایتم های خودش ایونت پراپرتی چینجد رو ریز میکنه نه برای پراپرتیهای ایتمهاش به این معنی که شما وقتی تغییری در ویو مدل (اطلاعات مشتری میدی) باید خود کلاس مشتری ایونت رو رِیز کنه و آبزروبل کالکشن فقط در صورتی که یک مشتری رو بهش اضافه کنی یا ازش کم کنی آپدیتها رو خبر میده

mze666
جمعه 15 دی 1391, 08:44 صبح
ممنونم از پاسختون. ولی سوال من اینه که وقتی از ReadOnlyObservableCollection هم استفاده می کنم اون هم تغییرات رو متوجه میشه. آیا این حالت طبیعی هستش؟ اگر آره پس فرقش با ObservableCollection چی هست؟ من توی بعضی فرم هام فقط می خوام اطلاعات نمایش داده بشه (بدون امکان ویرایش و حذف و ...).

ghabil
شنبه 16 دی 1391, 06:08 صبح
ببین با اینکه سوالت چیزی که من فکر میکردم نبود ولی جواب هنوز همونه: دقت کن که تو داری کالکشنت رو ریدن انلی میکنی یعنی اجازه نمیدی به لیست چیزی اضافه یا کم بشه ولی آیتمهاش رو که رید انلی نمیکنی. بزار اینطوری بهت توضیح بدم که کالکشن تو یکسری رفرنس داره به آبجکتهایی که توی حافظه هستند، وقتی از رید انلی کالکشن استفاده میکنی یعنی اجازه نمیدی که رفرنس جدیدی اضافه یا کم بشه. اما این مسئله از اینکه خود اون آبجکتی که توی حافظه هست تغییر بکنه چلوگیری نمیکنه، چون تغییر دادن پراپرتی یک آبجکت که آدرسش رو عوض نمیکنه، پس اصلا کالکشن از این تغییرات خبر دار نمیشه.... نمیدونم توضیخاتم کافی هست یا نه
اما اگر میخوای خود آبجکتهات رید انلی باشند خوب باید یک مدل (یا ویو مدل) رید انلی تعریف کنی (مثلا فقط با پرارپرتیهایی که گِتِر دارند) و بعد آبسروبل کالکشنت رو از اون نوع تعریف کنی