12 października 2016 -------------------- Przygotować aplikację WPF, która w widoku ma kontrolki TextBlock i TextBox. Stworzyć model zawierający tylko łańcuch. Przygotować klasę modelu widoku implementującą interfejs INotifyPropertyChanged. Aplikacja powinna działać tak, że zmiana tekstu w TextBox automatycznie zmienia zawartość TextBlock. Nie powinno być żadnego kodu C# w klasie MainWindow (tzw. code-behind). 9 listopada 2016 ---------------- Do interfejsu dodać przycisk, który czyści tekst z modelu widoku, a w konsekwencji także z modelu i widoku. Wykorzystać mechanizm poleceń. W osobnej kopii projektu: Użyć wiązań między kontrolkami, aby w aplikacji z poprzedniego zadania związać pasek postępu z suwakiem. Całkowicie usunąć model i model widoku. Zob. też konkurs. 16 listopada 2016 ----------------- Projekt TextBox/TextBlock: 1) W aplikacji z zad. z 12.10.2016 w poprzedniej grupie zadań (to z TextBox i TextBlock) należy dodać dodatkowe wiązanie koloru czcionki w obu kontrolkach oparte na konwerterach: a) kolor w TextBlock powinien zależeć od długości tekstu, b) kolor w TextBox powinien być zielony jeżeli zawiera wyłącznie litery A-Z, a-z i litery polskie, zółty jeżeli poza tymi literami są jeszcze cyfry i czerwone gdy pojawiają się inne znaki. 2) Do tej samej aplikacji dodać trzy przyciski związane z poleceniami (ICommand): a) pierwszy przycisk niech czyści zawartość TextBox, b) drugi niech usuwa z tekstu wszystkie znaki poza literami i cyframi, trzeci - niech zamienia je na spacje. Drugi i trzeci przycisk powinny korzystać z tego samego polecenia zdefiniowanego w modelu widoku - różnica działania niech wskazywana będzie przez parametr polecenia. 3) W zadaniu 4) z 12 grudnia 2015 do TextBox dodać zachowanie, które po każdej zmianie własności Text (zob. zdarzenie TextChanged) powoduje efekt dźwiękowy uzyskany np. za pomocą SystemSounds.Beep.Play();. Projekt Slider/ProgressBar (plik "2016-10-19_Pasek_2.zip"): 4) W projekcie Pasek (z zajęć) dodać dwa polecenia ustawiające suwak na pozycji minimalnej lub maksymalnej (w zależnościwartości parametru polecenia typu bool). Wykorzystać ogólną klasę MvvmCommand z zajęć. 5) Zdefiniować zachowanie dla suwaka (klasę dziedziczącą z Behavior), która będzie zmieniać pozycję suwaka w zależności od naciśnięcia klawiszy 1-9 (dla 1 powinno to być 0%, dla 9 - 100%). 6) Zdefiniować zachowanie dla suwaka, które zmienia kolor suwaka w zależności od jego pozycji (wartości). 7) Zdefiniować dwie własności doczepiane, która wskazują suwaki, które kontrolują szerokość i wysokość okna. Nowy projekt: 8) Ściśle trzymając się zasad MVVM przygotować aplikację rozwiązującą równania kwadratowe. Przewidzieć sytuację, w której nie ma pierwiastków. Użyć polecenia do zainicjowania obliczeń i wiązań do prezentacji obu pierwiastków. 23 listopada 2016 ----------------- W projekcie AsystentZakupów 1. Zrobić wiązanie między textBox.Foreground i button.IsEnabled. To będzie wymagało konwertera bool<->Color. 2. Do textBox dodać zachowanie typu Behavior, które zeruje zawartość Text po naciśnięciu klawisza Del zob. konkursy 7 grudnia 2016 -------------- 1. Zdefiniować rozszerzenie dla typu List przeprowadza sortowanie bąbelkowe elementów listy. 2. Rozszerzenie uogólnić do typu IEnumerable. 3. Do rozszerzenia dodać argument typu "Func comparer", które pozwala na przesłanie metody porównującej łańcuchy z kolekcji w dowolny sposób. 4. W wywołaniu rozszerzenia użyć wyrażenia Lambda, które porównuje łańcuchy na podstawie ich długości. W zadaniach nie korzystać z metody Array.Sort, ani z żadnych typów kolekcji automatycznie sortujących elementy. 5. Przygotować zestaw testów jednostkowych dla modelu aplikacji z zad. 8) z 16 XI. 11 stycznia 2017 ---------------- Do klas kompozytu dodać odwiedzającego CompositeValueVistor, którego metody przyjmują w argumencie wartość typu określonego w parametrze T. Korzystając z tego odwiedzającego zdefiniować metodę ToValueList, która tworzy listę przechowującą wartości z węzłów kompozytu.