‫DataBinding در WPF

به عنوان یک برنامه‌نویس ASP.NET عادت داشتم هر جا که اطلاعات تغییر می‌کند. متود DataBind()‎ را از کنترل‌هایی مثل GridView فراخوانی کنم. در WPF هم می‌خواستم همان کارها را بکنم اما به کمی مشکل برخوردم. در WPF باید کارهای زیر انجام شود:

۱- یکی از کنترل‌های گرید در WPF که امکانات Binding خوبی دارد کنترل DataGrid است. من هم از همین کنترل شروع می‌کنم.

۲- مقدار AutoGenerateColumns را مشابه ASP.NET برابر True قرار می‌دهم.

۳- اطلاعاتی که می‌خواهم با آنها کار کنم را به ItemSource (به جای DataSource) معرفی می‌کنم.

۴- متودی به اسم DataBind وجود ندارد. برای Refresh شدن اطلاعات باید دقت کنیم که مدل Data Binding در WPF چیزی به اسم Observer pattern است. در این الگو خود data به کنترل DataGrid می‌گویند که چه وقتی اطلاعات آنها تغییر کرده و باید اطلاعات Refresh شوند.

۵- برای پیاده‌سازی عملیات Refresh باید اطلاعاتی که قرار است به کنترل‌هایی داده‌ای Bind شوند، اینترفیس INotifyCollectionChanged را پیاده‌سازی کرده باشند. به این ترتیب این وظیفه خود منبع اطلاعاتی است که به استفاده کنندگانش اعلام کند که اطلاعات تغییر یافته.

۶- برای راحتی کار می‌توان از Collectionهای ویژه‌ای مثل BindingList استفاده کرد.

۷- نمی‌دانم این روش Data Binding در WPF خوب است یا بد. اما ظاهراً حق انتخاب دیگری وجود ندارد.

‫WPF بهتر است یا WinForms؟

 ‫معماری wpf

wpf به عنوان رقیبی جدی برای winforms از framework 3.0 به مجموعه دات‌نت اضافه شد. winforms از ابتدای تولد دات‌نت وجود داشته و تا حالا رشد خیلی زیادی کرده است. منابع بسیار زیادی درباره آن وجود دارد، برنامه نویسان زیادی به آن تسلط پیدا کرده اند و تعداد بسیار زیادی برنامه نوشته شده با آن موجود است. در آن سوی این رقابت wpf قرار دارد. wpf به زعم خیلی ها جایگزین winforms است و مایکروسافت با وجود آن دیگر winforms را توسعه نخواهد داد و صرفا به پشتیبانی آن اکتفا می‌کند. wpf به مذاق طراحان UI و عشاق گرافیک های آن چنانی بسیار خوش آمده است. ما هم به علت در پیش رو داشتن پروژه‌های جدید ویندوزی و به خاطر اینکه از قافله جهانی عقب نمانیم نظرات بعضی از مدافعان و مخالفان را بررسی کرده و به جهت فهم خودمان و استفاده دیگران خلاصه وار در اینجا می آوریم:

۱- wpf فقط روی ویندوز ویستا، ویندوز 2008، win xp sp2 و آخرین RDP ویندوز 2003 کار می‌کند.
۲- بسیار گفته شده که wpf در حوزه کنترل‌های کار با دیتا مثل DataGrid کمبودهای زیادی دارد. البته با وجود این ضعف گفته می‌شود که wpf در DataBindingهای آبجکتی مرسوم در دنیای Domain Drivern Design خیلی خوب عمل می‌کند. این مدل DataBinding از همان نوعی است که همراه با ORMهایی مثل NHibernate و LINQ رایج شده است.
۳- استدلال تعدادی از افراد برای عدم استفاده از wpf عدم علاقه آنها به دست کشیدن از دانسته‌ها و مهارت‌های قبلی‌شان در winforms و یادگیری تکنولوژی جدید wpf است. اگر شما هم مثل ما تجربه چندان با ارزشی روی winforms ندارید می‌توانید با انگیزه بیشتری به wpf فکر کنید.
۴- wpf یک عمو زاده دارد به نام SilverLight که هر دو در استفاده از XAML مشترک هستند. هر چند که SilverLight زیرمجموعه‌ای از wpf محسوب می‌شود ولی می‌توانید امیدوار باشید که با یادگیری wpf خود به خود کمی هم SilverLight یاد گرفته‌اید.
۵- wpf برای تولید و نمایش UI از خیلی از امکانات DirectX ،GPU و حافظه کارت گرافیک استفاده می‌کند و رابطه خیلی خوبی با پخش انواع فایل تصویری، ویدیویی، صوتی و انیمیشن دارد.
۶- ادعا می شود که کد منطق برنامه و کد Prsesentation در wpf کاملا از هم جداست. یعنی می توان کد XAML را به فردی که هیچ اطلاعاتی راجع به C#‎ ندارد سپرد تا آن را با Expression Blend حسابی عمل بیاورد. کد سی‌شارپ هم می‌تواند توسط یک برنامه‌نویس متعارف در Visual Studio توسعه پیدا کند.
۷- علی القاعده در برنامه های فارسی و آنهایی که از تقویم شمسی استفاده می‌کنند مشکلات زیادی وجود خواهد داشت. چون هنوز هیچ‌کس یک DatePicker فارسی با wpf ننوشته است و رفتار بقیه کنترل‌ها هم در محیط‌های پیچیده راست به چپ نویسی معلوم نیست. البته در مستندات خود wpf ذکر شده که پشتیبانی خیلی خوبی از یونیکد و مسایل localization وجود دارد.
۸- اگر خیلی از ژیگول‌بازی‌های wpf و wpfدوستان خوشتان نمی آید اصلا نامید نشوید چون winforms حالا حالاها زنده خواهد بود. همان طور که هنوز VB6 و حتی FoxPro زنده هستند.
۹- اگر برای اتمام پروژه ای عجله دارید از wpf استفاده نکنید چون ممکن است بدجوری شما را غافل‌گیر کند.
۱۰- برای یادگیری از کتاب زیر شروع کنید (بنا به توصیه دوستان wpf):
Windows Presentaion Foundation Unleashed by Adam Nathan
۱۱- بعضی امکانات جدید به wpf اضافه شده‌اند که من هنوز از بیشتر آنها سر در نمی‌آورم:

  • UI Automation
  • UI Virtualization
  • Routed Events
  • Attached Properties
  • Property change notification
  • XBAP