SajjadKhati
کاربر فعال <A href="http://forum.majidonline.com/f
در این مثال Binding که در موردش صحبت می کنیم درسته ولی نه تنها حالت اش. حالت کلی اش اون UpdateSourceTrigger ها است که بهش اشاره کردم.
بله.
طبعا اگر Binding ئه بر اساس PropertyChanged عمل می کنه همینطوره.
بله.
توضیح تون ایراد داره، شما Binding رو در رخداد CollectionChanged دخیل کرده اید، در حالی که قبلا عرض کردم که Binding نقشی در رخداد CollectionChanged نداره. اگر Binding ای هم وجود نداشت همین مساله برای رابطه ObsevableCollection و کنترل رخ میداد.
Binding قبلا شیء ObsevableCollection یا هر نوع داده دیگری که منبع بوده به کنترل تحویل داده، دیگه اینکه بعدا در هنگام تغییرات داخلی اون شیء چه رخداد هایی منجر به بروز رسانی در کنترل میشه نه ربطی به Binding داره و نه واسطه این ارتباط ئه و نه در بروز شون نقشی داره و نه از کار افتادن Binding تاثیری در این بروز رسانی بخاطر تغییر داخلی شیء میذاره.
درست نیست. ایراد به واسطه Converter شما است نه Binding دستی. فرض کنید که مقدار مشخصه X با Binding به مشخصه Y انتقال داده میشه، نتیجه اش اینه که شیء داخل X که مبداء هست در مقصد که Y ئه قابل دسترسی است، یک ارجاع ساده به شیء و طبعا Y به همون شیء اشاره داره که X. و اگر این شیء یک مجموعه باشه، اضافه کردن آیتم در X هیچ فرقی با اضافه کردن آیتم در Y نداره، هر دوشون به یک شیء اشاره دارند، اگر X چهار عضو داشته باشه، یعنی Y چهار عضو داره. محال ئه که در مجموعه داخل X تغییری رخ بده در حالی که Y (به همون شیء اشاره می کنه) بدون بروز رسانی مونده باشه.
سلامی مجدد
خیلی ممنون استاد .
آها ، پس وقتی Binding میکنیم ، هر دوی Binding Source Property و هم Binding Target Property ، از همون شی استفاده میکنن (مثل اینکه یک شی را توی یک متغییر بریزیم و بعد همون متغییر را توی متغییر دیگه ای بریزیم) .
بنابراین وقتی یه پروپرتیِ دستی (به عنوان Binding Target Property) که بسازیم و یه کالکشن را هم بهش Binding کنیم (و از Converter استفاده نکنیم) ، فقط کافیه که یکبار کالکشنِ سورس مون ، مقداردهی بشه ، همون کالکشن ، به عنوان کالکشن Target مون در نظر گرفته میشه . پس دیگه مهم هم نیست که دیگه با هر بار اضافه شدن آیتم به کالکشنِ سورس مون ، خبری به Binding یا Target داده بشه .
حالا به کالکشن Source مون هم که هر تغییری بدیم و اعضایی را حذف یا اضافه کنیم ، یعنی به همون کالکشنِ Target مون همون تغییرات را داده بودیم (چون شیِ کالکشنِ هر دو پروپرتی ، یکی هستن) .
حالا مشکل این پروژه ام اینه که برای این Binding ، از Converter استفاده کردم .
یعنی چون در اینجا ، میخوایم در هر بار حذف و اضافه شدنِ آیتم ها به کالکشنِ Source مون ، خبر دار بشیم تا برای کالکشنِ Target مون تبدیل انجام بدیم ، Binding ، هیچ روال و رویدادی را وقتی که عضوی به کالکشنِ Source مون اضافه بشه ، در نظر نمیگیره و بصورت اتوماتیک خبر دار نمیشه و چون در اینجا نیاز به Convert داریم و بنابراین دو شیِ کالکشنِ Source و Target از هم جدا هستن و بنابراین نیاز داریم هر بار وقتی که آیتم های کالکشن سورس مون تغییر میکنن ، با خبر بشیم ، پس به روش Binding معمولی ، دیگه جواب نمیده .
بلکه باید درون رویداد CollectionChanged ئه ObsevableCollection ئه Source مون برای با خبر شدن از تغییر در آیتم های کالکشن اش استفاده کنیم و با متدِ BindingExpression.UpdateTarget ، کالکشنِ Target مون را وادار به آپدیت شدن کنیم تا Binding بتونه Converter را فراخونی کنه .
درست میگم؟
تشکر استاد .