PictOgr – delegowanie wykonania akcji do modelu widoku.

PictOgr - delegowanie wykonania akcji do modelu widokuNie zawsze dobrym rozwiązaniem jest budowanie komendy dla każdej operacji

wykonywanej na widoku, wręcz może okazać się uciążliwe przekazanie danych z formularza do  komendy. W takiej sytuacji z pomocą przychodzą delegaty.

Implementacja interfejsu ICommand niesie ze sobą potrzebę deklaracji dwóch metod ExecuteCanExecute oraz zdarzenie CanExecuteChanged.

Jako że w  programowaniu nie istnieje jedno rozwiązanie problemu i w tym  przypadku można delegować wykonanie metod Execute oraz CanExecute do modelu widoku.

Podczas tworzenia instancji na bazie klasy RelayCommand  przekazujemy do niej dwa delegaty: execute, canExecute.

Wykonanie metody CanExecute nie zawsze jest istotne dlatego też w celu uproszczenia wykluczenia delegowania dla  tej metody powstała  klasa RelayCommand rozszerzająca klasę bazową  o tej samej nazwie i już określonym typie generycznym (object). Dzięki temu możemy przy tworzeniu nowej komendy wykorzystać prostą składnię: new RelayCommand(executeDelegate);

 

Przykład wykorzystania RelayCommand

Przy budowaniu widoku konfiguracji dla PictOgra, wykorzystany został mechanizm RelayCommand do ustawiania wzorca ścieżki z dostępnych komponentów nazw.

PictOgr

Tak przygotowany kod pozwala obsłużyć dowolną ilość modułów nazwy jakie będą  zaimplementowane  w aplikacji.

RelayCommand  pozwolił na delegacje  tego  mechanizmu do modelu widoku i operowaniu bezpośrednio z wykorzystaniem dostępnych właściwości.

Właściwość PathFormat, wyświetla bieżący wzorzec nazwy w widoku konfiguracji.

Każdy dodany nowy moduł nazwy (Button), wykorzystuje komendę AddNameModuleCommand z parametrem przechowującym identyfikator modułu nazwy.

 

Testowanie RelayCommand

Poniżej znajduje się proste testy sprawdzające działanie klasy RelayCommand w projekcie  E2E.

 

Zakończenie

Mechanizm RelayCommand w większości przypadków niweluje potrzebę tworzenia innych klas komend, skraca to kodowanie i powoduje powstawanie mniej błędów.

 

Dziękuję za wytrwałość i zachęcam do komentowania.

 

Jest to post przygotowany na potrzeby konkursu „Daj Się Poznać 2017” organizowanym przez Macieja Aniserowicza.