This article is currently in the process of being translated into Croatian (~99% done).
Introduction to WPF Commands
U nekom od prethodnih članaka vodiča pričali smo o tome kako se rukuje događajima, primjerice kada korisnik pritisne dugme ili neku stavku izbornika. U modernim korisničkim sučeljima, tipično je da neka funkcija bude dostupna s više mjesta i da ju pozivaju različite korisničke akcije.
Primjerice, ako imate tipično sučelje s glavnim izbornikom i nizom alatnih traka, radnja poput "Novo" ili "Otvori" može biti dostupna iz izbornika, iz alatne trake, iz kontekstnog izbornika (npr. kada pritisnete desnu tipku miša negdje unutar glavnog područja aplikacije) ili preko prečaca poput Ctrl+N i Ctrl+O.
Svaka od ovih akcija treba pokrenuti isti komad koda, pa biste tako u WinForms aplikaciji definirali događaj za svaku od navedenih opcija koji bi zatim pozvao neku zajedničku funkciju. U ovom primjeru to bi značilo barem tri rukovatelja događajima i neki kod koji bi se izvršavao za prečac. Nije baš idealna situacija.
Naredbe
U WPF-u, Microsoft pokušava riješiti taj problem s konceptom zvanim naredbe. On vam omogućava da definirate akcije na jednom mjestu i onda ih referencirate iz svih kontrola grafičkog sučelja kao što su izbornici, dugmad alatne trake itd. WPF također prati prečace na tipkovnici i prosljeđuje ih odgovarajućoj naredbi, ako postoji, čime se omogućuje jednostavno dodavanje prečaca u aplikaciju.
Naredbe također rješavaju još jedan problem kada se radi s više ulaza u istu funkciju. U WinForms aplikaciji, bili biste odgovorni za pisanje koda koji bi onemogućio korisničke elemente sučelja kada akcija nije dostupna. Na primjer, ako vaša aplikacija može koristiti neku naredbu za međuspremnik poput Cut, ali samo kada je tekst označen, morali biste ručno omogućiti i onemogućiti stavku glavnog izbornika, gumb na alatnoj traci i stavku kontekstualnog izbornika svaki put kada se promijeni odabir teksta.
S WPF naredbama ovo je centralizirano. Imamo jednu metodu koja odlučuje da li se neka naredba može izvršiti, a onda WPF automatski pali i gasi sve elemente grafičkog sučelja. Ovo uvelike pojednostavljuje kreiranje responzivnih i dinamičkih aplikacija!
Povezivanje naredbi
Naredbe same po sebi zapravo ne obavljaju ništa. One se sastoje od ICommand sučelja koje samo definira događaj i dvije metode: Execute() i CanExecute(). Prva metoda je ona koja obavlja neku radnju, a druga se koristi kako bi se ustanovilo da li je neka akcija trenutno dostupna. Da bi izvršili stvarnu radnju naredbe, potrebna vam je veza između naredbe i vašeg koda i tu u igru ulazi CommandBinding.
CommandBinding se obično definira na prozoru ili na korisničkoj kontroli te sadrži reference na naredbu kojom rukuje, kao i na rukovatelja događajem kako bi se izvršili Execute() i CanExecute() događaji naredbe.
Predefinirane naredbe
Možete naravno implementirati vlastite naredbe, što ćemo detaljnije razmotriti u jednom od idućih poglavlja, ali kako bi vam olakšao, WPF tim je definirao preko 100 uobičajenih naredbi koje možete koristiti. One su podijeljene u 5 kategorija: ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands i ComponentCommands. ApplicationCommands sadrži naredbe za radnje koje se jako često obavljaju kao što su Novo, Otvori, Spremi i Izreži, Kopiraj i Zalijepi.
Sažetak
Naredbe vam pomažu da reagirate na istu akciju iz različitih izvora koristeći jedan događaj. Također olakšavaju omogućavanje i onemogućavanje elemenata korisničkog sučelja na temelju trenutne dostupnosti i stanja. Ovo je bila teorija, a u sljedećim poglavljima ćemo raspraviti kako se naredbe koriste i kako definirati vlastite naredbe.