W poprzednim poście pokazałem prostą aplikację z wykorzystaniem Caliburn.Micro. Teraz chciałem pokazać bardziej zaawansowane (ale tylko trochę) sposoby bindowania.Bindowanie bezpośrednio do obiektu W przykładzie, który został pokazany uzupełniając dane w textboxach przypisujemy te dane do odpowiedniej property w klasie. Fragment dla przypomnienia public string LastName { get { return _person.LastName; } set { _person.LastName = value; NotifyOfPropertyChange("Last...
Pod koniec poprzedniego postu na temat MVVM wspomniałem o Caliburn.Micro jako narzędziu, które czyni moją pracę lżejszą. Dla tych, którzy nie wiedzą jest to framework wspomagający w tworzeniu aplikacji opartej o wzorzec MVVM. Jeśli ktoś zastanawia się dlaczego od razu nie wspomniałem o tym frameworku i poprzedni przykład robiłem bez jego użycia to moja odpowiedź jest prosta (i poparta gorzkim doświadczeniem). Otóż robiąc coś zaawansowanego musimy mieć świadomość mechanizmów za tym stojących inaczej...
W poprzednim poście opisałem (bardzo ogólnie) dlaczego już nie lubię WinForms i dlaczego używam WPF. Przez używanie WPFa mam na myśli WPF+MVVM ponieważ szczerze mówiąc to uważam, że stosowanie WPFa bez MVVMa to strata czasu, ale to tylko moje zdanie (jak większość opinii wyrażona na tym blogu). Czym więc jest ten cały MVVM? Otóż jest to ni mniej ni więcej wzorzec projektowy. Na początek trochę teorii (niestety bez niej się nie da).Model Obiekty biznesowe, serwisy i wszystko to co jest związane z ...
Od pewnego czasu wszystkie nowe aplikację okienkowe tworzę w WPFie. Próba napisania czegoś w Winformsach sprawia mi ból. A przecież gdy zaczynałem to Winformsy były moją pierwotną technologią (bo php litościwie pomine). To właśnie WinFormsy wraz z prostotą C# (o naiwności!) były przyczyną mojego zainteresowania platformą .net. Pamiętam jak przez mgłę mój pierwszy projekt w WinFormsach. Jakieś matematyczne obliczenia (średnia, mediana itp.), ale istotny był graficzny interfejs (jego brak powodował ...
Może słyszeliście o takim ptaszku Fody. Ostatnim czasem ptaszek ten podbił moje serce. Korzystam z jego usług tak często jak się tylko da. Ogólnie muszę podziękować Pawłowi Łukasikowi za prezentacje na KGD.NET, która otworzyła mi oczy PropertyChanged.Fody To chyba mój ulubiony pakiet, ale zanim go opiszę muszę zrobić drobne wprowadzenie. Od początku mojej przygody z WPFem ( i ogólnie XAMLem) strasznie żmudnym procesem było bindowanie pomiędzy DataModelem a widokiem (niech zasłona milczenia zakryje fak...
Serię poświęconą WPF oraz MVVM czas zacząć. Wiem – wpisów tego typu jest w sieci sporo. Wiem, MVVM nie zawsze jest idealnym wyborem i istnieje wokół niego sporo kontrowersji. Wiem, emerytury w Polsce są za niskie. Nie zmienia to faktu, że przy okazji implementacji aplikacji WPFowej postanowiłem spróbować zaznać szczęścia w królestwie władcy ModelViewViewModel i jego rycerzy: ObservableCollection i Command. I muszę powiedzieć, że nie żałuję. Na pierwszy rzut oka różnic...
Nigdy nie podobały mi się te magic stringi przy wywoływaniu PropertyChanged okazuje się że innym też nie
Architektura 3805 dni, 6 godzin, 9 minut temu 233 źrodło rozwiń
Bez zbędnego przeciągania i całego bałaganu związanego z założeniem nowego bloga i przywitania z czytelnikami, przechodzę do rzeczy. W obecnie pisanej przeze mnie aplikacji WPFowej zaistniała konieczność dodania testów dla użytkowników (nie mam na myśli unit testów, a testów sprawdzających jednokrotnego wyboru). Rozwiązaniem, jakie pierwsze przyszło mi do głowy, jest przechowywanie d...
Cztery lata temu, popełniłem post „Zapomnijcie o windows forms”. Po czterech latach i wielu innych technologiach po drodze wracam do tematu. Ostatnio miałem okazję napisać mała aplikację w WPF, to był raczej test, a nie aplikacja dla klienta, jednak nie zmienia to faktu, że musiałem przysiąść i to napisać :) Nie wiem czy to tylko mnie tyczy, czy są też inni ludzie którzy podobnie myślą, ale osobiście nie zobaczyłem, żadnych pozytywnych zmian w tej technologii mimo upływu 48 miesięcy.
Jakiś czas temu zdarzyło mi się hobbystycznie wykonać kilka projektów desktopowych przy wykorzystaniu WPF. Jako, że jestem typowym programistą web’owym, moja wiedza na temat bibliotek do WPF’a była znikoma...
Ostatnio potrzebowałem użyć Border z CornerRadius ustawionym na jakąś wartość, aby móc potem umieścić w środku inne kontrolki (np. obrazek). Moje pierwsze podejście było następujące: Niestety w taki sposób zawartość Border nie zostanie poprawnie przycięta i efekt jest następujący: Znalazłem na forum bardzo ciekawe rozwiązanie z użyciem OpacityMask. Najpierw kod a potem wyjaśnienie: Efekt: Aby zrozumieć powyższy kod należy najpierw wyjaśnić jak działa OpacityMask. OpacityMask to brush, który o...
Czasami w WPF zachodzi potrzeba stworzenia dependency property ale tylko do odczytu. Zwykłą właściwość bardzo łatwo zaimplementować tzn.:publicdouble Area { get { return width*height; } } Jeśli korzystamy z binding’u danych, wtedy powyższe rozwiązanie jest niewystarczające i należy skorzystać z dependnecy property. Dla przypomnienia, standardowa deklaracja wygląda następująco:publicclass MyStateControl : ButtonBase { public MyStateControl() : base() { } public Boolean State { g...
Konwertery – krótkie klasy i jednocześnie bardzo przydatne elementy, bez których bindowanie niektórych wartości w XAMLu byłoby bardzo kłopotliwe. Mają one zastosowanie w projektach typu Winodws Phone, Silverlight oraz WPF. Praktycznie w większości tego typu projektów mnożna od razu przekleić te najważniejsze.
Podczas korzystania z obiektu CollectionView w widoku, oprócz samej prezentacji kolekcji często mamy także dodatkowe kontrolki powiązane z właściwościami aktualnie wybranego elementu. Standardowym podejściem przy realizacji tego zadania jest utworzenie w klasie ViewModel właściwości udostępniającej aktualnie wybrany element kolekcji, a następnie zdefiniowanie w kontrolkach wiązań do interesujących nas właściwości tego elementu.
W WPF przy wykorzystaniu stylów oraz szablonów w prosty sposób możemy stworzyć mechanizm skórek, dzięki któremu możliwa będzie zmiana wyglądu naszej aplikacji w trakcie jej działania. W dzisiejszym wpisie pokażę jak taki mechanizm stworzyć. Zacznijmy od prostego okna składającego się z kontenera Grid oraz trzech przycisków. Po naciśnięciu każdego z nich załadowana zostanie odpowiednia skórka...
Niedawno tworząc szablon kontrolki w WPF natknąłem się na pewien problem. Chcąc odwołać się z szablonu do właściwości kontrolki standardowo użyłem rozszerzenia TemplateBinding. Kod się skompilował ale po uruchomieniu aplikacji pojawił się wyjątek. Oto uproszczona postać szablonu...
Tym razem krótko, o czymś co może się przydać nie tylko na egzaminie, ale także w codziennej pracy z zasobami i bindowaniem do nich. Rozważmy cztery przypadki bindowania do zasobów w kodzie.
Poprzez mechanizm wiązania danych WPF pozwala w łatwy sposób prezentować zawartość kolekcji obiektów. Jeżeli jednak oprócz samego wyświetlania elementów zależy nam na ich sortowaniu, grupowaniu, filtrowaniu czy nawigacji po nich, standardowe możliwości kolekcji okażą się niewystarczające. W takiej sytuacji idealnym rozwiązaniem będzie użycie widoku kolekcji.
W tej części o szablonach dla danych hierarchicznych. Wyświetlając hierarchiczne dane w kontrolkach takich jak TreeView czy Menu możemy użyć HierarchicalDataTemplate. Klasa ta posiada wszystkie właściwości znane z klasy DataTemplate oraz kilka dodatkowych...