Wbudowane komendy znajdziemy w jednej z 5 statycznych klas:
- ApplicationCommands
- ComponentCommands
- EditingCommands
- MediaCommands
- NavigationCommands
- Decyzja czy będzie używana jedna z dostępnych (zaimplementowanych już) komend czy będzie to stworzona nowa implementacja
- Skojarzenie komendy z kontrolkami
- Stworzenie metody obsługującej komendę
- Stworzenie kontrolki CommandBinding bindującej komendę z uchwytem
- Dodanie bindingu komendy do kolekcji Commands okna, tam gdzie wywoływana jest komenda
Skojarzenie komendy z kontrolką
Wiele kontrolek implementuje interfejs ICommandSource dzięki czemu udostępniają właściwość Command, np. Button. Komenda jest wywoływana w tym przypadku po wciśnięciu przycisku:
Code:
Wywołanie komendy za pomocą gestów
Komendę można także skojarzyć z gestami myszy czy zdarzeniami klawiatury:
Code:
Wywołanie komendy z kodu:
Jeżeli kontrolka nie udostępnia właściwości Command, można zawartość procedury komendy wywołać bezpośrednio z kodu:
Code:
aParameter - parametr komendy (jeżeli nie jest wymagany można przesłać null)
TargetControl - tutaj zostanie rozpoczęte poszukiwanie metodą bubble w poszukiwaniu CommandBinding.
Uchwyty komend
Sygnatura uchwytu do komendy:
Code:
Command Bindings
Obiekt tego typu skleja całą architekturę komend - łączy komendę z jej uchwytem. Dodając obiekt typu CommandBinding do kolekcji CommandBindings okna lub innej kontrolki umożliwia wywołanie kodu w momencie zadziałania komendy. Poniżej kod umożliwiający stworzenie i rejestrację CommandBinding:
Code:
Command Bubbling
Każda kontrolka posiada kolekcję CommandBindings. Jest to związane z tym iż podobnie jak w Routed Events tu także występuje mechanizm bubblingu. Przerwanie tego mechanizmu przebiega tak samo jak dla zdarzeń.
Wyłączanie komend
Jeżeli komenda nie uczestniczy w bindingu automatycznie jest wyłączona. Innym sposobem jest użycie metody CanExecute która zwraca wartość typu bool mówiącą czy dana komenda jest możliwa do wykonania czy też nie.
Aby przechwycić zdarzenie CanExecute:
1. Tworzymy metodę która determinuje czy można wykonać komendę:
Code:
2. Dla bindingu dodajemy obsługę zdarzenia CanExecute:
Code:
Można także to zrobić w kodzie XAML:
Code:
Tworzenie własnych komend
W tym przypadku Microsoft zaleca stworzenie statycznej klasy która eksponuje komendę do użycia:
Code:
Brak komentarzy:
Prześlij komentarz