بررسی DataBinding در WPF

سیستم Data Binding در WPF یک راه ساده و قدرتمند برای نمایش و کار با داده ها را برای برنامه نویس فراهم می کند. کنترل های مختلف مثل Button و ListView به صورت توکار دارای قابلیت های قدرتمند Data Binding در WPF هستند که به برنامه نویس اجازه می دهد تا یک داده واحد یا مجموعه ای از داده ها را به خصوصیات یک کنترل Bind کند. قابلیت Data Binding در WPF  فواید زیادی نسبت به مدل های پیشین دارد، که از این فواید می توان به محدوده بیشتری از خصوصیات کنترل ها از data binding پشتیبانی می کنند، نمایش انعطاف پذیر داده ها در رابط کاربری و جداسازی شفاف منطق برنامه از رابط کاربری اشاره نمود.

مفهوم Data Binding

بدون در نظر گرفتن اینکه چه عنصری قرار است به چه منبع داده ای بایند شود، Data Binding همیشه مدل زیر را دنبال می کند :

Data Binding diagramشکل بالا مشخص می کند که عمل Data Binding مانند پلی است میان یک منبع داده و یک پراپرتی مقصد که البته همیشه دو طرفه نیست. به صورت معمول هر بایندینگ شامل چهار مولفه است : منبع داده، شیء مقصد، پراپرتی مقصد و مسیری در منبع داده که مقدار از آن خوانده می شود. به طور مثال اگر می خواهید پراپرتی Title در شیء Customer را در یک TextBox نمایش دهید، منبع داده شما شیء Customer، شیء مقصد نام آن TextBox، پراپرتی مقصد Text و مسیر منبع داده Title خواهند بود. پراپرتی مقصد باید یک Dependency Property باشد. بسیاری از پراپرتی های UIElement در WPF یک Dependency Property هستند و اکثر آن ها اگر read only نباشند، از data binding به صورت پیش فرض پشتیبانی می کنند.

جهت جریان داده ها

در WPF جریان داده در سیستم Data Binding می تواند یک طرفه (One Way)، دو طرفه (Two Way) و یا یک طرفه به سمت منبع (OneWayToSource) باشد. وجود این روش ها باعث می شود تا شما به عنوان یک برنامه نویس قادر به ساخت فرم های ورود داده بسیار انعطاف پذیر باشید. تنظیم حالت بایندینگ با تغییر پراپرتی Mode در آبجکت Binding مورد نظر قابل انجام است. شکل زیر به درک بهتر این روش ها کمک می کند :

Data flow directions

  • OneWay : تغییر در منبع داده باعث به روز رسانی پراپرتی مقصد می شود اما تغییر در پراپرتی مقصد باعث به روز رسانی منبع داده نخواهد شد. این حالت بایندینگ برای نمایش داده ها به صورت فقط خواندنی کاربرد دارد. به طور مثال شما می خواهید لیستی از محصولات را به مشتری نمایش دهید تا او بتوانید یکی از آن ها را انتخاب کند. این روش برای کنترل هایی که قابلیت ویرایش به کاربر نمی دهند (مثل ListView) کاربرد دارد.
  • TwoWay : تغییر در منبع داده باعث به روز رسانی پراپرتی مقصد و تغییر در پراپرتی مقصد باعث به روز رسانی منبع داده خواهد شد. این نوع بایندینگ مناسب فرم های ورود و ویرایش داده ها هستند که به صورت کامل با کاربر تعامل دارند. پیش فرض حالت بایندینگ اکثر پراپرتی ها حالت OneWay است اما برخی پراپرتی ها (مثل پراپرتی Text در TextBox) به صورت پیش فرض حالت TwoWay دارند.
  • OneWayToSource : این حالت برعکس حالت OneWay است به این صورت که با تغییر پراپرتی مقصد منبع داده به روز رسانی خواهد شد.
  • OneTime : برای مقدار دهی اولیه به پراپرتی مقصد بکار می رود. همانطور که از نامش پیداست فقط یک بار و برای اولین بار پراپرتی مقصد را مقدار دهی می کند و تغییرات بعدی منبع داده را بر روی پراپرتی مقصد اعمال نخواهد کرد. این حالت برای مواقعی مناسب است که منبع داده استاتیک است، یا در طول عمر یک شیء احتمال تغییر کردن آن وجود ندارد.

فقط توجه داشته باشید که برای اینکه در حالت های OneWay و TwoWay بتواند تغییرات را تشخیص دهد باید یک مکانیزم آگاه سازی تغییرات مثل INotifyPropertyChanged را برای منبع داده ها پیاده سازی کرده باشید.

چه زمانی منبع داده به روز خواهد شد؟

بایندینگ در حالت های TwoWay و OneWayToSource به تغییرات مقدار پراپرتی مقصد حساس می شوند و باید با تغییر مقدار در پراپرتی مقصد، منبع داده را آپدیت کنند. فرض کنید یک TextBox داریم که می خواهیم هنگامی کاربر مقدارش را تغییر داد، منبع داده ما بر اساس آن آپدیت شود. حال به نظر شما چه زمانی منبع داده باید آپدیت شود؟ بلافاصله بعد از اینکه کاراکترها را در TextBox وارد کرد یا هنگامی که کنترل Focus را از دست داد یا زمانی که کاربر بر روی یک Button کلیک کرد؟ پراپرتی UpdateSourceTrigger در بایندینگ مشخص می کند که چه زمانی منبع داده باید به روز رسانی شود. این پراپرتی می تواند یکی از چهار مقدار زیر باشد :

  • PropertyChanged : به محض اینکه مقدار پراپرتی تغییر کند، سورس آپدیت می شود.
  • LostFocus : زمانی که Focus کنترل به کنترل دیگری منتقل می شود، سورس آپدیت خواهد شد.
  • Default : حالت پیش فرض یک کنترل است که به طور مثال برای کنترل TextBox برابر LostFocus و برای کنترل CheckBox برابر PropertyChanged است.
  • Explicit : تا زمانی که متد UpdateSource صدا زده نشود، سورس آپدیت نخواهد شد.

اگر UpdateSourceTrigger یک TextBox را به PropertyChanged تغییر دهید ممکن است برنامه شما با مشکل مواجه شود، زیرا هر بار که کاربر کاراکتری را در TextBox وارد می کند منبع داده به روز رسانی خواهد شد و این سر بار زیادی (مخصوصاً اگر منبع داده دیتابیس باشد) به برنامه تحمیل خواهد کرد. در اکثر مواقع استفاده از Explicit مرقون به صرفه تر و بهتر از دیگر روش هاست، زیرا بهتر است تا کاربر دستور ذخیره را صادر نکرده، منبع داده به روز رسانی نشود.

یک مثال ساده

بهتر است یک مثال کوچک را برای درک بهتر موضوع اجرا کنید. یک اپلیکیشن WPF جدید بسیازید و کدهای XAML زیر را بین تگ های <Grid> و </Grid> پنجره خود قرار دهید :

<TextBox Name="textBox1" Width="167" />
<Label Content="{Binding ElementName=textBox1,Path=Text,UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Name="label1" />

همانطور که مشاهده می کنید در اینجا پراپرتی Content (پراپرتی مقصد) از شیء label1 (شیء مقصد) را به پراپرتی Text (مسیر منبع داده) منبع داده (شیء textBox1) بایند کرده ایم و با تغییر UpdateSourceTrigger به PropertyChanged مشخص کرده ایم که به هنگام تایپ کردن کاربر در TextBox متن Label تغییر کند. اگر برنامه را اجرا کنید مشاهده خواهید کرد که با تایپ کاراکتر درون TextBox متن Label بلافاصله تغییر خواهد کرد.

farasun.wordpress.com

منبع این نوشته : MSDN

Subcribe to Farasun feedمشترک فراسان شويد

10 منبع برای شروع یادگیری WPF

هر چند WPF تکنولوژی نسبتاً جدیدی است، اما برای شروع یادگیری آن در اینترنت منابع بسیار زیادی پیدا می شود. این روز ها با وجود منابع آنلاین، برای یادگیری یک تکنولوژی جدید نیازی به خرید کتاب های معمولی ندارید. WPF برای برنامه نویسان دات نت هنوز تازه است. مخصوصاً در ایران خیلی ها خودشان را هنوز درگیر آن نکرده اند و کتاب و مرجع مناسبی به زبان فارسی در مورد WPF وجود ندارد. برای شروع یادگیری WPF می توانید از منابع زیر شروع کنید :

MSDN : بهترین مکان برای شروع یادگیری تکنولوژی های مربوط به مایکروسافت MSDN بوده و هست. MSDN مرجع خوبی برای تمام برنامه نویسانی است که با تکنولوژی های مایکروسافت کار می کنند. تمام موضوعات مربوط به WPF در MSDN طبقه بندی شده اند و شما به راحتی می توانید مطلب مورد نظر خود را پیدا کنید. اگر سئوالی داشتید می توانید در فاروم WPF مطرح کنید و جواب خود را بگیرید.

WindowsClient : سایت رسمی مایکروسافت و مرجع برنامه نویسان WPF و WinForm یکی از منابع خوب برای شروع یادگیری WPF است. در این سایت علاوه بر مقالات متعدد، ویدئوهای آموزشی مناسبی درباره آموزش WPF پیدا خوهید کرد.

CodeProject : کد پراجکت نامی آشناست که با داشتن مثال ها و مقالات متعدد در زمینه WPF منبع بسیار مناسبی برای یادگیری WPF و حرفه ای شدن در آن است.

WPF Tutorial.net : این سایت آموزش های پایه ای متعددی در دسته بندی های مشخص به شما ارائه می کند که برای شروع WPF گزینه بسیار مناسبی است. مخصوصاً بخش «یادگیری WPF در یک هفته» با فراهم نمودن یک آموزش ساختارمند، از نکات پایه ای WPF تا موضوعات پیشرفته را به شما آموزش می دهد.

LearnWPF.com : یک وبلاگ خوب با دسته بندی های مشخص و مطالب خوب است. مطالب پایه ای WPF را به خوبی توضیح داده و برای شروع می تواند گزینه مناسبی باشد.

وبلاگ Josh Smith on WPF : آقای Josh Smith در این وبلاگ به صورت حرفه ای در مورد WPF و الگوی طراحی MVVM مطلب می نویسد. شما می توانید در این صفحه از وبلاگ آقای اسمیت یادگیری WPF را آغاز کنید.

WPF Training Guide : در این سایت می توانید به صورت قدم به قدم شروع به یادگیری مباحث پایه ای WPF کنید.

وبلاگ های WPF : وبلاگ ها همیشه در آموزش تکنولوژی های جدید پیش قدم هستند. در این صفحه می توانید لیستی از وبلاگ هایی که در زمینه WPF، Silverlight و مباحث مربوط به آن ها می نویسند را مشاهده کنید.

WPFplex.com : این سایت یک دایرکتوری از منابع آموزشی، کتاب ها و ابزارها برای WPF است. این سایت هم برای کسی که می خواهد شروع به یادگیری WPF کند مناسب است و هم به درد حرفه ای های WPF می خورد.

Channel9 : در این سایت می توانید ویدئوهای با کیفیتی در مورد WPF پیدا کنید که توسط کارمندان مایکروسافت ساخته شده اند.

farasun.wordpress.com

اگر برنامه نویس دات نت هستید و می خواهید در آینده نیز برنامه نویس دات نت بمانید، WPF را جدی بگیرید و برای یادگیری آن وقت بگذارید!

MSDN

بهترین مکان برای شروع یادگیری تکنولوژی های مربوط به مایکروسافت MSDN بوده و هست. MSDN مرجع خوبی برای تمام برنامه نویسانی است که با تکنولوژی های مایکروسافت کار می کنند. تمام موضوعات مربوط به WPF رد MSDN طبقه بندی شده اند و شما به راحتی می توانید مطلب مورد نظر خود را پیدا کنید.

CodeProject

کد پراجکت با داشتن مثال ها و مقالات متعدد در زمینه WPF منبع بسیار مناسبی برای یادگیری WPF و حرفه ای شدن در آن است.

http://www.wpftutorial.net/

این سایت آموزش های پایه ای متعددی در دسته بندی های مشخص به شما ارائه می کند که برای شروع WPF گزینه بسیار مناسبی است.

LearnWPF.com

یک وبلاگ خوب با دسته بندی های مشخص و مطالب خوب است که برای شروع یادگیری WPF گزینه خوبی است.

نسخه Client Profile دات نت فریم ورک

اگر تا به حال در ویژوال استادیو 2010 برنامه های WPF یا WinForms نوشته باشید، حتماً متوجه شده اید که به صورت پیش فرض Target این پروژه ها دات نت فریم ورک نسخه Client Profile است. این نسخه از دات نت فریم ورک، زیر مجموعه ای از دات نت فریم ورک 4.0 است که برای برنامه های تحت دسکتاپ بهینه سازی شده است. این نسخه شامل تمام ویژگی هایی است که یک برنامه تحت دسکتاپ نیاز دارد. نسخه Client Profile باعث می شود تا حجم پکیج Install برنامه شما به حداقل برسد و فقط قسمتی از دات نت فریم ورک را بر روی سیستم کاربر نصب می کند که برای اجرای یک برنامه تحت کلاینت مورد نیاز است.

Target Client Profile

اجزای موجود در دات نت فریم ورک کلاینت پروفایل :

  • common language runtime (CLR)
  • ClickOnce
  • Windows Forms
  • Windows Presentation Foundation (WPF)
  • Windows Communication Foundation (WCF)
  • Entity Framework
  • Windows Workflow Foundation
  • Speech
  • XSLT support
  • LINQ to SQL
  • Runtime design libraries for Entity Framework and WCF Data Services
  • Managed Extensibility Framework (MEF)
  • Dynamic types
  • Parallel-programming features
  • Debugging client applications

اجزایی که در نسخه کلاینت پروفایل وجود ندارند :

  • ASP.NET
  • Advanced Windows Communication Foundation (WCF) functionality
  • .NET Framework Data Provider for Oracle
  • MSBuild

Project Templateهایی که به صورت پیش فرض نسخه کلاینت پروفایل را Target قرار می دهند :

  • WPF Application
  • WPF Browser Application
  • WPF Custom Control Library
  • WPF User Control Library
  • Windows Forms Application
  • Windows Forms Control Library
  • Console Application
  • Empty Project
  • Window Service
  • All Office 2007 and Office 2010 project templates
  • WCF Service Library
  • Activity Designer Library
  • Activity Library
  • Workflow Console Application
  • F# Application
  • F# Tutorial

چه موقع از نسخه کلاینت پروفایل استفاده کنیم؟
زمانی که پروژه شما قرار است تحت ویندوز اجرا شود و نیازی به استفاده از وب سرویس و ویژگی های حرفه ای WCF ندارید، استفاده از نسخه کلاینت پروفایل کار عاقلانه ای است. به این دلیل که استفاده از این نسخه باعث می شود تا کاربر برای اجرای برنامه شما نیازی به نصب کامل دات نت فریم ورک 4.0 بر روی سیستم خود نداشته باشد.

کنترل های رایگان Ribbon برای WPF

با فراگیر شدن استفاده از WPF به عنوان رابط کاربری و آسان تر شدن طراحی رابط های کاربری زیبا و چشم نواز به واسطه آن، کنترل های زیبا و کاربردی زیادی از طرف شرکت ها و برنامه نویسان مستقل برای WPF طراحی شده اند. از زمانی که مایکروسافت در آفیس 2007 رابط کاربری جدیدی به نام Ribbon را معرفی کرد، برنامه نویسان و شرکت های نرم افزاری به فکر استفاده از آن در برنامه های خودشان بوده اند. به همین علت شرکت های طراحی کامپوننت های رابط کاربری مثل ComponentOne و DevExpress مجموعه های خوبی در این زمینه، البته با قیمت های بالا، ارائه کردند. خوشبختانه در حال حاضر کنترل های باکیفیت و رایگان زیادی برای WPF پیدا می شود. در این مطلب با سه مجموعه رایگان برای پیاده سازی رابط کاربری Ribbon در WPF آشنا می شوید.

Microsoft Ribbon for WPF

مایکروسافت یک کنترل Ribbon را به صورت Preview در پروژه WPF Toolkit ارائه کرده بود که هم اکنون به صورت جداگانه قابل دریافت است. این Ribbon انعطاف پذیری خوبی دارد و از الگوی MVVM پشتیبانی مناسبی می کند. یک پروژه مثال نیز که با استفاده از الگوی MVVM توسعه داده شده نیز به همراه این Ribbon قابل دریافت است. ظاهر این کنترل به راحتی قابل تغییر است و از زبان های راست به چپ مثل فارسی به خوبی پشتیبانی می کند.

Download | توضیحات بیشتر

Fluent Ribbon Control Suite

یک پروژه اوپن سورس در کدپلکس است که ظاهری شبیه به Ribbon آفیس 2010 را پیاده سازی می کند. ظاهر زیبایی دارد و شما به راحتی می توانید بر اساس نیاز خود آن را سفارشی کنید. مستندات نسبتاً خوبی هم برای شروع دارد. در مورد پشتبانی از زبان فارسی، تمام کنترل های WPF به علت پشتیبانی توکار از یونیکد مشکل خاصی ندارند، اما این Ribbon کمی در مورد زبان های راست به چپ از نظر قرارگیری در صفحه مشکل دارد.

Fluent

Download

Odyssey WPF Controls

این پروژه علاوه بر یک کنترل Ribbon مناسب، شامل کنترل های OutlookBar , ExplorerBar و BreadcrumbBar نیز هست که می توانید در پروژه های خود از آن ها به صورت کاملاً رایگان استفاده کنید. از نظر زیبایی شاید از کنترل های بالا کم داشته باشد اما انعطاف پذیری خوبی دارد و کار کردن با آن ساده است. تنها مشکلی که در مورد راست به چپ شدن دارد این است که محل قرارگیری ApplicationMenu و Quick Access Toolbar را به درستی نشان نمی دهد.

odysseyDownload | مثال استفاده

در حال حاضر من از Ribbon مایکروسافت در پروژه ام استفاده میکنم و تا به حال به مشکلی بر نخوردم. به نظر میاد در حال حاضر Fluent دارای باگ های زیادی است اما Odyssey برای استفاده در پروژه های واقعی به اندازه ی کافی قابل اعتماد است.