Dzisiejszy wpis jest zainspirowany problemem, jaki od czasu do czasu widzę w aplikacjach zespołów programistów, którym pomagam. W prawie każdej aplikacji, wcześniej czy później, znajdziemy jakiś widok ustawień. Na ogół znajdują się w nim przyciski pozwalające otworzyć kolejne okna/widoki, w których użytkownik może zmienić konfigurację aplikacji. Bardzo często gdy zaczynamy tworzyć aplikację, liczba ustawień jest dość mała, ale z czasem bardzo się rozrasta. Do t...
Sztuka programowania 466 dni, 22 godziny temu 268 źrodło rozwiń
W dzisiejszym poście przyglądniemy się dość ciekawej wtyczce rozszerzającej możliwości Visual Studio. XAML Power Toys jest generatorem widoków, który automatycznie tworzy kod XAML na podstawie wcześniej przygotowanego view-model-u. Siłą rzeczy, skorzystamy z niego najlepiej stosując w naszej aplikacji wzorzec MVVM, chociaż nie jest to oczywiście warunek konieczny.
Jak naprawić problem kiedy to WPF ubija aplikację zanim wyrysuje nam główne okno aplikacji.
Podczas tworzenia aplikacji XAML (WPF, UWP, Xamarin.Forms) zazwyczaj wybieramy wzorzec MVVM. Jednak każdy programista ma swoje własne poglądy jak ten wzorzec powinien być zaimplementowany. W tym poście opiszę najczęstsze mity z jakimi się spotkałem podczas implementacji wzorca MVVM.
Dzisiaj zastanawiam się, czy wieść o wsparciu dla WPF i Windows Forms w .Net Core 3 jest przełomowa czy też nie. Zapraszam.
o tym, jak czasami wredne bywa używanie snippetów- na przykładzie z życia
Sztuka programowania 874 dni, 20 godzin, 47 minut temu 22 źrodło rozwiń
W poprzednim wpisie pokazałem, jak użyć Fluent Validation w aplikacji WPF. Wspomniałem, że tamta implementacja niestety nie nadaje się, gdy potrzebujemy walidować dane w sposób asynchroniczny – np. sprawdzić w usłudze, czy dane są unikalne. W tamtym wpisie pokazałem użycie IDataErrorInfo ponieważ jest on najczęściej wykorzystywany do realizacji walidacji. Natomiast dzisiaj opiszę nową wersję tego interfejsu, dodaną w .NET 4.5 – INotifyDataErrorInfo. Co fajne nowy interfejs...
W poprzednich wpisie pokazałem w jaki sposób można zintegrować Fluent Validation z aplikacją ASP.NET MVC, dzisiaj przyszedł czas na WPF. W WPF jest kilka sposobów na realizację walidacji. Najczęściej wykorzystuje się do tego interfejs IDataErrorInfo, który definiuje dwa elementy: właściwość Error zawierającą informacje o błędach oraz indekser, który zwraca błąd dla właściwości o nazwie przekazanej jako indeks. Interfejs ten można wykorzystać do integracji Fluent Validatio...
Czasem lepsze jest wrogiem dobrego. Trochę się o tym przekonałem walcząc z GUI pewnego projektu, który tym razem uruchamiamy na komputerze panelowym z Win10. Ale po kolei.
Last time we finished with all the pieces except the common:MahAppsPopupWindowAction used in XAML. Prism already has a PopupWindowAction (it wasn't there a few years ago) so let's use that to create our own popup window action that will show MahApps-metro-style-dialog.
Showing MahApps modal windows in a Prism WPF and MVVM friendly way (part 1).
Behavior is a attachable piece of code to variours XAML elements. It’s part of Blend SDK. Full source code can be found on a GitHub page. How it works? Behavior attached to window listens to key-presses When sequence for Konami Code is completed then it lanuches Storyboard animation Storyboard moves raptor and plays raptor squeak.
Na rynku wydawniczym nie ma w tej chwili wielu książek poruszających tematykę XAML-a w WPF. Aplikacje desktopowe są w tej chwili w zdecydowanym odwrocie na korzyść aplikacji webowych i nic nie zapowiada, aby w najbliższej przyszłości miało się to istotnie zmienić. Z XAML-em w podejściu MVVM spotkamy się również w przypadku pisania aplikacji mobilnej z wykorzystaniem Xamarin Forms. Ale Xamarin-owy XAML różni się mocno od tego, który mamy w tej chwili w WPF (nieco bardziej przypomina XAML znany z zapomnia...
Jednym z fundamentów WPF’a są zasoby – Resources. Definiowane w ResourceDictionary czyli słowniku zasobów. Każdy element słownika posiada swój klucz, który używamy do pobrania zasobu „z bazy”.
Ostatni tydzień nie przyniósł żadnych rewolucyjnych zmian do aplikacji Winbot, którą rozwijam już jakieś 10 tygodni 🙂 Pracuję nad nową funkcją, która pozwoli na tworzenie nowych scenariuszy ręcznie (bez nagrywania aktywności myszki lub klawiatury). Postanowiłem to wprowadzić aby była możliwość tworzenia zagregowanych scenariuszy lub też bardziej generycznych (np. scenariusz, który wykonuje inny scenariusz przez godzinę). Ale narazie to zostawmy – jeszcze nie jest gotowe, w...
Daj się poznać 2017 1354 dni, 20 godzin, 2 minuty temu 42 źrodło rozwiń
W końcu przyszedł ten moment, w którym stwierdziłem, że pora wypuścić pierwszą wersję Winbota. Zbudowałem instalator i wystawiłem release na githubie. Dostępny do pobrania tutaj. Zanim jednak to uczyniłem, zastanawiałem się co będzie, jeżeli zacznę wypuszczać kolejne wersje. W jaki sposób informować użytkownika z zainstalowaną aplikacją, że pojawiła się nowsza wersja? W tym poście opiszę własne rozwiązanie tego problemu. Jedna rzecz była dla mnie pewna od samego początku. ...
Daj się poznać 2017 1363 dni, 21 godzin, 4 minuty temu 76 źrodło rozwiń
Kolejny tydzień prac dobiegł końca. Aplikacja małymi krokami rozwija się. Cały czas staram się dodawać interesujące funkcje lub rozwijać w miarę ciekawe problemy, aby nie zanudzać czytelników bloga moimi cotygodniowymi raportami z postępu prac. Według mnie, najciekawszy problem z jakim się zetknąłem w ostatnim tygodniu było skojarzenie plików z moim programem. Chciałem aby po zainstalowaniu Winbota, można było eksportować z niego pliki, które później będą możliwe do urucho...
Daj się poznać 2017 1371 dni, 15 godzin, 58 minut temu 20 źrodło rozwiń
Jak już wspominałem w jednym z postów, bardzo odpowiada mi pełna separacja UI od reszty kodu jaką zapewnia wzorzec MVVM i doceniam w pełni jego zalety. Czasem jednak pojawia się klasyczne “g..no w szprychy” podczas jakieś prostej do wykonania w code-behind czynności. Dzisiaj, podczas pracy nad desktopową aplikacją do robota pojawił się problem z bindigiem hasła z PasswordBox-a. O ile w przypadku TextBox-a nie ma z tym żadnego problemu, t...
Daj się poznać 2017 1379 dni, 20 godzin, 17 minut temu 213 źrodło rozwiń
Kolejną rzeczą, nad którą pracowałem w ramach mojego projektu Winbot, była edycja różnych obiektów za pomocą interfejsu użytkownika. W aplikacji występuje kilka typów obiektów. Mógłbym przygotować oddzielne kontrolki do edycji każdego typu z osobna, ale takie rozwiązanie mnie nie zadowalało. Za każdym razem kiedy chciałbym wprowadzić nowy typ, musiałbym dodatkowo przygotować nową kontrolkę do edycji. Byłoby to dość niewygodne i denerwujące. Moim celem było przygotowanie gen...
Daj się poznać 2017 1383 dni, 19 godzin, 26 minut temu 29 źrodło rozwiń
W ostatnich tygodniach nieco więcej skupiłem się na pisaniu postów na bloga niż na samym projekcie, nie znaczy to jednak że go odłożyłem. Ponieważ udało mi się kilka tygodni temu podgonić trochę tematy związane z komunikacją, nadal z grubsza biorąc mieszczę się w założonych ramach czasowych. Gotowe jest już większość kodu Arduino (poza częścią związaną z autonomią poruszania się robota) i w zasadzie w większości mam g...
Daj się poznać 2017 1384 dni, 20 godzin, 40 minut temu 22 źrodło rozwiń