WPF 6 i MVVM, Data-Binding : Tutorial i podstawy

  Рет қаралды 5,036

Cezary Walenciuk

Cezary Walenciuk

Күн бұрын

Пікірлер: 25
@nataliasikorka4825
@nataliasikorka4825 2 жыл бұрын
Trochę informacji uzupełniających/wskazówek: - ViewModel - zamiast myślenia o nim jako reprezentacji modelu, można opisać go też jako abstrakcyjną definicję widoku, która opisuje co widok zawiera, ale nie opisuje jak to wygląda. Klasyczny przykład - ekran logowania. Wiemy że musi zawierać pole do uzupełnienia loginu, pole do uzupełnienia hasła, przycisk logowania i przycisk rejestracji. Na tej podstawie możemy zdefiniować model widoku - string Login, string Password, komenda do logowania oraz komenda do rejestracji. Co do przetrzymywania stanu są różne szkoły, ale - bindingi nie muszą się odnosić bezpośrednio do modelu. Czasami trudno jest wymyślić taki widok aby reprezentował model domenowy 1:1. W modelu widoku możemy zrobić binding do niezależnych propertiesów, które podczas jakiegoś zdarzenia tworzą nową instancję modelu i przekazują do serwisu. Polecam też wyrzucać ViewModele do osobnego projektu, dzięki temu mamy pewność że nie będziemy w nim mieszali kod dotyczący samych widoków. ViewModele powinny być całkowicie niezależne od samych widoków i nie mieć o nich żadnej wiedzy. Można sobie wyobrazić że macie aplikację desktopową w MVVM, przychodzi szef i mówi "klient chce tą aplikację również na telefon w Xamarinie". Jeżeli wasze ViewModele są wydzielone i dobrze napisane, powinny być jak najbardziej reużywalne w waszej mobilnej aplikacji. - code-behind/kod zaplecza - nie chodzi o to żeby w code-behind nie było żadnego kodu, jest to błędne myślenie. Chodzi o to aby w code-behind nie operować na modelach/wykonywać jakąkolwiek logikę aplikacji. Kod zaplecza jak najbardziej może zawierać manipulację dotyczące samego wyglądu widoku, czy jego informacji - manipulacją tłem przycisku, pozycja kontrolek, itp. jak najbardziej nadają się do code-behing. Zaryzykowałbym nawet stwierdzeniem, że wrzucanie tego do ViewModelu jest łamaniem MVVM, ponieważ twój widok przestaje być uniwersalny/niezależny od widoku. Polecam artykuł na ten temat - www.reactiveui.net/docs/handbook/view-models/ - crossplatformowy WPF - jako crossplatformową aplternatywę WPF polecam AvaloniaUI. Pisze się bardzo podobnie do WPF, ale działa na Windowsa, Linuxa czy macOC. Nie wyszła jeszcze oficjalna wersja, ale jest na tyle dojrzałą bibliotekę że można spokojnie pisać sensowne rzeczy. avaloniaui.net/ - bibliotek do pisania MVVM - jako bibliotekę do wzorca MVVM polecam gorąco ReactiveUI www.reactiveui.net/ można za jej pomocą pisać w WPF/Avaloni/Xamarinie/UWP i wiele innych. Pomaga pozbyć się "boilerplate code" związanego z INotifyPropertyChanged za pomocą atrybutu, ma własną implementację komendy - ReactiveCommand, ułatwia pisanie bindingów w kodzie, umożliwia ich przypisanie do eventów i wiele innych. Jej drugą mocną stroną jest to, że bazuje na bibliotece ReactiveX dla .NET - frontendowcy mogą znać ją pod aliasem RxJS dla javascriptu, dzięki czemu możemy z łatością operować na strumieniach zmianach modelu za pomocą operatorów Linq (ich odpowiedników dla interfejsu IObservable), czy łatwo pracować na wątkach za pomocą Schedulerów. reactivex.io Pozdrawiam ciepło i życzę jak najwięcej subów 😁
@barttux6436
@barttux6436 2 жыл бұрын
Hej, super komentarz :) Mega, że wspomniałaś o code-behind w kontekście słynnego "don't touch it!" :D Zaciekawiły mnie dwa ostatnie punkty w Twoim komentarzu, ponieważ nigdy nie miałem do czynienia z tymi frameworkami / libkami. W związku z tym, jeśli można zapytać: - po krótkim reaserchu Avalonia wydaje się być mega, ale czy obecnie używanie jej jako głównego frameworka ze względu na cross-platformowość ma sens? Zwłaszcza, że na dzień dzisiejszy jest dość duży hype na świeży .NET MAUI - czy w praktyce i w pracy .NET-owcy używają ReactiveUI? I jak wygląda kwestia stabilności i szybkości (o ile jest w ogóle jakaś różnica) końcowej aplikacji po zaimplementowaniu go? Pozdrawiam serdecznie :)
@DonaldFranciszekTusk
@DonaldFranciszekTusk Жыл бұрын
Cześć, dzięki za rady. Planuję stworzyć pracę inżynierską w formie aplikacji produktywnościowej w WPF (jakieś notatki, planowanie w kalendarzu, tryb skupienia itp.). Powinienem zrobić to w MVVM? Pytam, bo np. taki RelayCommand jest dla mnie trochę skomplikowany. Jakbyś jeszcze miała jakieś rady, np. jak zabrać się za logikę biznesową, za konkretne funkcjonalności, w konkretnych ViewModelach, to bardzo bym był rad.
@VarranComodoo
@VarranComodoo 2 жыл бұрын
super, rozdrąż temat jak najbardziej, kibicuje! i Czekam na kolejne materiały! Budowa własnych kontrolek osadzanych w XAML jak kazda defoultowa, przekazywanie danych miedzy ViewModelami różnych okien czy widoków, dynamicznie tworzone menu czy zakładki TabControl i wszystko zgodne z MVVM ;) Oraz najbardziej popularne schematy architektoniczne aplikacji biznesowych w WPF MVVM ;)
@michalaraszczuk
@michalaraszczuk 2 жыл бұрын
WPF 🥰
@EcuTester
@EcuTester Жыл бұрын
Dziękuję za poradnik i twoją pracę ! 👍
@rafalwel4990
@rafalwel4990 Жыл бұрын
Świetna promocja Białej. Dziękuję.
@arkadiuszbialeck325
@arkadiuszbialeck325 2 жыл бұрын
Strasznie niedoceniony kanał na polskim YT, oglądam wszystko na bieżąco, zasługujesz na większą widownie :D !
@xMrTEDx
@xMrTEDx Жыл бұрын
@piotrkrolewski3634
@piotrkrolewski3634 2 жыл бұрын
Super , czekałem na materiał o tym
@kamilgasiorek8548
@kamilgasiorek8548 2 жыл бұрын
Bardzo ciekawy film, pozdro 😉
@tomek_kot
@tomek_kot 2 жыл бұрын
Taktyczny 👍
@andrijs1521
@andrijs1521 Жыл бұрын
dzieki
@marekk1748ptp
@marekk1748ptp 2 жыл бұрын
Bardzo ułatwiają pracę z bindingem takie biblioteki jak propertychanged fody oraz caliburn micro
@CezaryWalenciuk
@CezaryWalenciuk 2 жыл бұрын
Kod do projektu : github.com/PanNiebieski/WPF-MVVM-SimpeExample
@andrijs1521
@andrijs1521 Жыл бұрын
Ciekawe jak stan cross platform UI sporo na ten temat szukam ale nic nie ogarniam :D
@DonaldFranciszekTusk
@DonaldFranciszekTusk Жыл бұрын
Cześć. Planuję stworzyć pracę inżynierską w formie aplikacji produktywnościowej w WPF (jakieś notatki, planowanie w kalendarzu, tryb skupienia itp.). Powinienem zrobić to w MVVM? Pytam, bo np. taki RelayCommand jest dla mnie trochę skomplikowany. Jakbyś jeszcze miał jakieś rady, np. jak zabrać się za logikę biznesową, za konkretne funkcjonalności, w konkretnych ViewModelach, to bardzo bym był rad.
@pawes9611
@pawes9611 2 жыл бұрын
Witam. Mam pytanie jak najlepiej bindować rysunki w WPF. Do tej pory użytwam , ale przy przełączeniach pomiędzy oknami rośnie mi użycie pamięci i podejrzewam właśnie że taki sposób bindowania jest tego powodem. Pliki mam w formacie PNG i są rozmiaru kilku kB, ale rysunków mam kilkanaście na stronie.
@CezaryWalenciuk
@CezaryWalenciuk 2 жыл бұрын
Po stronie kodu musisz mieć większą kontrolę nad odświeżaniem obrazka bo z tego co przeczytałem za każdym razem gdy zmieniasz coś nawet wielkość kontenera do obrazka to tworzysz nowy obrazek w pamięci
@Gorenhir
@Gorenhir 2 жыл бұрын
Trochę rozjaśniłeś tą kwestię, na uczelni tak się im śpieszyło że pokazali to tylko na zdarzeniach XDDD
@bartomiejciurla8472
@bartomiejciurla8472 2 жыл бұрын
Mam nadzieje że dane tego Customera, którego pokazujesz, są randomowe ;)
@Fghhhg8883
@Fghhhg8883 Жыл бұрын
Microsoft kocha komplikować na potęgę
@norbertjaworowski6314
@norbertjaworowski6314 2 жыл бұрын
Nie zrozumiałem nic... Jednak pozostanę przy tym co jest mi wygodne.
@CezaryWalenciuk
@CezaryWalenciuk 2 жыл бұрын
a co jest wygodne ? Jeśli ASP.NET to rozumiem i dlatego w nim programuje ponad 10 lat
@norbertjaworowski6314
@norbertjaworowski6314 2 жыл бұрын
@@CezaryWalenciuk po prostu w głównym pliku mam niemal same funkcje obsługujące onClick i inne eventy. Każda taka funkcja odpala już konkretną funkcje w klasie statycznej, a każdy element, każda część programu jest w osobnej klasie. Może przez to mam trochę więcej plików i może mam pomieszany model z widokiem, ale tak się przyzwyczaiłem i tak jest mi wygodnie. Chce poprawić coś w panelu bocznym to wchodzę do pliku "panel boczny" i mam w nim wszystko. Ale ja nie pracuje zawodowo w tym fachu, dlatego mogę sobie pozwolić na nie trzymanie standardów ;) właściwie to wszystko jest kwestią przyzwyczajenia.
OMAR ALSHOGRE: Surviving and escaping the Syrian Prison System | Sarde (after dinner) Podcast #40
1:45:04
Według TikToka jak wygląda programowanie?
6:27
Cezary Walenciuk
Рет қаралды 1,6 М.
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 37 МЛН
Cat mode and a glass of water #family #humor #fun
00:22
Kotiki_Z
Рет қаралды 18 МЛН
Async i Await w C# 13. Pułapki i triki
2:12:04
Cezary Walenciuk
Рет қаралды 1,1 М.
Co nowego .NET 8, C# 12, ASP.NET Core 8
37:37
Cezary Walenciuk
Рет қаралды 5 М.
Grzegorz Piotrowski - Event Sourcing - świat pełen zdarzeń
43:40
Git i GitHub w 60 minut
1:20:14
Jak nauczyć się programowania
Рет қаралды 220 М.
Rynek Pracy Programistów? Trendy, Quiet Quitting i OverEmployed
10:21
Cezary Walenciuk
Рет қаралды 2,5 М.
ToDoList - aplikacja desktopowa w WPF i wzorzec MVVM
1:16:36
kierunek dotNET
Рет қаралды 11 М.
In UNDER 10 Minutes - WPF Binding Made Easy!
8:55
Dev Leader
Рет қаралды 1,2 М.
Wzorzec MVVM w WPF - 01 - Wprowadzenie
56:53
Jacek Matulewski
Рет қаралды 7 М.
Co nowego w C# 11 ?
32:27
Cezary Walenciuk
Рет қаралды 2,6 М.
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 37 МЛН