با اینکه آینده زمل قابل پیش بینی نیست ولی افراد زیادی هستن که از این تکنولوژی تو برنامه هاشون استفاده میکنن و شاید این موجب بشه تا مایکروسافت مجبور به توسعه اش بکنه. تازگیا خبرهایی هم از ادامه پشتیبانی مایکروسافت از زمل با اومدن ویندوز 10 به گوش میرسه (که دعا می کنیم این خبرا راست باشه).

خب تو این پست قراره بریم سراغ چند تا از قابلیت های زمل تا تردید اونایی که می خوان بیان سمتش کمی رفع بشه. پس با هم همراه بشیم.

انعطاف پذیری

به جرات میتونم بگم انعطاف پذیرتر از این جایی نمی تونین پیدا کنین. لامصب مثل خمیر نونوایی ـه ، به هر شکلی که بخوای می تونی درش بیاری. مثلاً می خوای کنترل نوار وضعیت (Progress Bar) رو که ظاهری راست داره رو به شکل دایره دربیاری (مثل نوار های وضعیت حلقه ای که تو IOS یا وینفون یا اندروید هستن). درواقع زمل بهتون این اجازه رو میده که به ساختار داخلی کنترل دسترسی داشته باشین و تغییرات مدنظر رو توش اعمال کنین.

بازم یه مثال بزنم ایندفعه از ساختار درختی کنترل Button:

اول از همه کنترلی از نوع ControlTemplate وجود داره که این در واقع پایه هر کنترلیه و بعد از اون نوعی بنام ButtonChrome هست که داخل کنترل قبلی قرار میگیره و در نهایت متن Buttton میمونه که اونم از نوع ContentPresenter ـه و اینم داخل کنترل قبلی جای میگیره. واسه درک بهتر تصویر زیر رو یه نگاهی بندازین:


اتصال (Binding)

انعطاف پذیری که بالا گفتم یه گوشش برمیگرده به اتصالات. معادل این قابلیت تو سی شارپ میتونه مقدار دهی متغیرها باشه، با این تفاوت که این مقدار دهی تو سی شارپ تو بعضی اوقات ممکنه طوری باشه که پردازنده هم درگیر بشه و در نهایت هنگ کردن برنامه رو در پی داره ولی زمل فکر همه جاش رو کرده. اتصالات طوری تو زمل برنامه ریزی شده که تاثیری رو برنامه نداشته باشه و بدون هیچ مکثی برنامه به کار خودش ادامه بده و همچنین تو این قابلیت دستتون بازه و می تونید بطور مثال از اکثر خاصیت های کنترل ها واسه اتصالات استفاده کنید.
مثال: فرض کنید یه دیتابیس و یه لیست باکس دارین و اتصال فیلد های دیتابیس رو از طریق Binding به کنترل لیست انجام دادین. اگه بصورت دستی دیتابیس رو از منیجرش آپدیت کنین لیست هم بصورت خودکار اقدام به آپدیت خودش میکنه. بدون اینکه از کارای Binding خبری داشته باشیم خودش تو پشت پرده به آسونی هر چه تمام عملیات مربوطش رو انجام میده. اگه کمی به شبکه بندی آشنا باشین متوجه میشین که کار Binding تقریباً شبیه شبکه  Circle ـه. به این طریق که وا می ایسته پشت در دیتابیس و هر موقع دیتابیس در رو باز میکنه و فیلد جدید رو بهش میده میبره و میده به کنترل هدف و بهش میگه خودت رو بروزرسانی کن :)

بهینه سازی

اگه بخواین تو بخش بهینه بودن WPf رو با WinForm مقایسه کنین باید بگم اصلاً قابل مقایسه با هم نیستن. تو WPf همه چی دست توسعه دهندست و در صورت آشنایی به تکنیک های بهینه سازی میشه برنامه رو از لحاظ حافظه مصرفی، پردازشی و گرافیکی بهینه کرد. مثال:
بعضی از کنترل ها توی ساختار داخلیشون اجزایی دارن که زیاد مورد استفاده کاربر قرار نمی گیره در واقع یه جزء اضافی محسوب میشه که تو این حالت توسعه دهنده میتونه اونرو حذف کنه.
میدونم حالا با خودتون میگین با حذف یه جزء کوچیک اتفاق خاصی رخ نمیده. درسته. ولی این ویژگی تو پروژه های بزرگ خیلی به درد می خوره (قطره قطره جمع گردد وانگهی دریا شود)
خودتون هم میتونین امتحانش کنین :)