This article has been localized into Persian by the community.
معرفی فرمان ها در WPF
در فصل قبل، گفتیم که چطور میشود از طریق رویدادها یک دکمه (Button) و یا یک منو (Menu Item) را انجام داد. از طریق صفحه های نمایش(UI) پیشرفته، از طرق مختلفی میتوان یک تابع را فراخوانی کرد.
برای مثال، اگر یک صفحه نمایش معمولی با یک MainMenu و مجموعه ای از ابزارها داشته باشید، اکشن هایی مانند New و Open در Main Menu در جعبه ابزار ممکن است در Context Menu موجود باشد (برای مثال وقتی که روی این کنترل راست کلیک میکنید) و یا هنگامی که از کلمات میان بری مانند Ctrl+N و Ctrl+O استفاده می کنید.
هر کدام از این اقدامات (actions)، نیازمند به یک کد مشخص دارد تا بتواند کار مورد انتظار را انجام دهد، مانند اپلیکیشن های Winforms، شما باید یک رویداد برایشان تعریف کنید و بعد از آن یک تابع مشترک را فراخوانی کنید. بنابر مثال بالا، شما نیاز به سه رویداد و نوشتن مقداری کد دارید تا کلمات میان بر را اجرا کنید. گرچه خیلی کار ایده الی به نظر نمی آید.
فرمان ها (Commands)
مایکروسافت با استفاده ازمفهومی به نام "فرمان ها" سعی در ارتقای WPF را دارد. با استفاده از فرمان ها، اقدام هایی که نیاز است هنگام استفاده از کنترل هایی مثل menu items و toolbar buttons انجام دهید را یکبار تعریف کنید و سپس در همه جای صفحه کاربری (UI) از آن استفاده کنید. WPF همچنین به کلمات میانبر (keyboard shortcuts) گوش میدهد، و سپس آنها رو به فرمان مناسب (در صورت وجود) میفرستد. به این وسیله بصورت ایده آلی از کلمات میانبر در اپلیکیشن استفاده میکند.
فرمان ها کاربردهای خوب دیگری هم دارند. به طور مثال وقتی که چندین داده به طور همزمان باید به یک تابع وارد شوند. در اپلیکیشن های WinForms، شما باید کدهایی بنویسید تا اگر به فانکشنی دسترسی نداشتیم، دسترسی به برخی از کنترل های مورد نظر در رابط کاربری را قطع کنید. برای مثال، اگر نرم افزار شما قادر به استفاده از فرمان کلیپ برد است، مانند بریدن (Cut)، در ابتدا کاربر باید متنی را انتخاب کرده باشد. در غیر این صورت کنترل مربوط به این تابع در رابط کاربری باید غیر فعال باشد. در صورتی که در ورژن WinForms شما باید بصورت دستی از تابع text selection changed استفاده کنید.
با استفاده از فرمان های WPF، این موضوع بصورت متمرکز کنترل میشود. با استفاده از یک تابع، شما تصمیم میگیرد که آیا یک فرمان بخصوص میتواند اجرا شود یا نه و در ادامه، WPF تصمیم میگیرد که آیا باید بصورت خودکار سایر کنترل های در رابط کاربری را از دسترس خارج کند یا نه. به همین خاطر است که فکر می کنیم WPF کمک شایانی به ایجاد نرم افزار داینامیک و پاسخگو (Responsive و Dynamic) می کند.
وصل کردن (انقیاد) فرمان ها
فرمان ها بصورت خودکار کاری انجام نمیدهند. برای بکارگیری فرمان ها، باید (Interface) واسط کاربری ICommand را تعریف و اجرا کنید. این اینترفیس شامل دو تابع و یک رویداد (Event) می باشد: 1- تابع ()Execute 2- تابع ()CanExecute تابع اول برای انجام دادن اصل کار است، ولی دومین تابع برای چک کردن است تا مشخص شود آیا چنین اقدامی (کاری) در حال حاضر موجود می باشد یا خیر. برای انجام دادن کار که فرمان به دنبال اجرا کردن آن است، به یک لینک بین فرمان و کد نیاز دارید، و اینجا جایی است که CommandBinding مورد استفاده قرار میگیرد.
معمولا CommandBinding در Window و یا UserControl استفاده می شود و رفرنس های فرمان (Command) را مدیریت می کند. CommandBinding همچنین رویدادهای داخل اینترفیس ICommand را که با ()Execute() and CanExecute کار میکنند، مدیریت میکند.
فرمان های از قبل تعریف شده
به طور قطع شما میتوانید فرمان های خود را تعریف کنید و ما در یکی از فصل های آینده به آن خواهیم پرداخت. تیم WPF بیش از 100 فرمان ایجاد کردند که شما می توانید از آنها برای توسعه کار خود استفاده کنید. این 100 فرمان، به 5 گروه مختلف تقسیم بندی شده اند. نام این تقسیم بندی فرمان های کاربردی (ApplicationCommands)، فرمان های جهت یابی NavigationCommands، فرمان های رسانه ای (MediaCommands)، فرمان های ویرایشی (EditingCommands)، و فرمان های کامپوننتی (ComponentCommands) است. بویژه فرمان های کاربردی، شامل فرمان های متداولی است که به صورت مداوم مورد استفاده قرار میگیرد مانند: ذخیره کرد، باز کردن، کپی کردن، بریدن، و چسباندن.
خلاصه مطلب
فرمان ها به پاسخ گویی اقدامات/کارهای مشترکی که از منابع مختلف تقاضا شده است از طریق یک رویداد، کمک می کند. همچنین فرمان ها فعال کردن و یا غیر فعال کردن کنترل های استفاده شده در رابط کاربری بر اساس موجود بودنشان و یا حالتشان (State) را بسیار راحت تر می کنند. تمام تئوری پشت فرمان ها همین بود که به آن پرداختیم. در فصل بعدی به این خواهیم پرداخت که چطور میتوان عملا از فرمان ها استفاده کرد و اینکه شما چطور میتوانید از کامندهایی که خودتان تعریف میکنید استفاده کنید.