Witaj w repozytorium z materiałami do szkolenia Tworzenie aplikacji WPF MVVM. Ten projekt zawiera kompleksowe przykłady i ćwiczenia demonstrujące kluczowe koncepcje tworzenia aplikacji Windows Presentation Foundation (WPF) z wykorzystaniem wzorca Model-View-ViewModel (MVVM).
- Poznanie podstaw XAML i tworzenia interfejsów użytkownika
- Zrozumienie wzorca MVVM i jego implementacji
- Praktyczne zastosowanie różnych layoutów WPF
- Tworzenie rzeczywistych aplikacji biznesowych
Do rozpoczęcia tego kursu potrzebujesz następujących rzeczy:
- .NET 9 SDK
- Visual Studio 2022 lub Visual Studio Code
- Podstawowa znajomość C# i programowania obiektowego
Projekt jest zorganizowany w dwóch głównych sekcjach:
vavatech-pgz-wpf-mvvm/
├── docs/ # Dokumentacja szkolenia
│ ├── wpf-mvvm.bmpr # Diagramy i schematy
│ └── wpf-mvvm.pdf # Materiały szkoleniowe
├── src/ # Kod źródłowy
│ ├── Fundamentals/ # Podstawowe koncepcje
│ └── RealWorld/ # Praktyczne przykłady
└── README.md # Ten plik
Sekcja Fundamentals zawiera stopniowe wprowadzenie do technologii WPF i wzorca MVVM, podzielone na moduły:
Lokalizacja: src/Fundamentals/01_XAML/WpfApp/
Opis: Wprowadzenie do języka XAML (eXtensible Application Markup Language) - podstawowego narzędzia do definiowania interfejsów użytkownika w WPF.
Kluczowe tematy:
- Podstawowa składnia XAML
- Definicja zasobów (Resources)
- Pędzle (Brushes) - SolidColorBrush, LinearGradientBrush, RadialGradientBrush
- Binding do zasobów statycznych
- Struktura aplikacji WPF
Główne pliki:
MainWindow.xaml- Główne okno z przykładami różnych pędzli i przyciskówApp.xaml- Konfiguracja aplikacjiWpfApp.csproj- Konfiguracja projektu .NET 9
Lokalizacja: src/Fundamentals/02_Views/
Opis: Demonstracja różnych sposobów organizacji i nawigacji między widokami w aplikacji WPF.
Zawiera dwa projekty:
- WpfApp - Nowoczesna implementacja z wieloma widokami
- WpfOldApp - Tradycyjne podejście dla porównania
Kluczowe tematy:
- Tworzenie wielu widoków (Views)
- Nawigacja między widokami
- UserControl vs Window
- Organizacja struktury aplikacji
- ShellView jako główny kontener
Główne widoki:
ShellView.xaml- Główny kontener aplikacjiFirstPageView.xaml- Pierwsza stronaSecondPageView.xaml- Druga stronaUserControlView.xaml- Przykład UserControlMainView.xaml- Główny widok
Lokalizacja: src/Fundamentals/03_Layouts/WpfApp/
Opis: Szczegółowe omówienie wszystkich głównych paneli układu dostępnych w WPF.
Kluczowe tematy:
- StackPanel - Układ pionowy/poziomy
- Grid - Tabelaryczny układ z wierszami i kolumnami
- DockPanel - Dokowanie elementów do krawędzi
- Canvas - Absolutne pozycjonowanie
- WrapPanel - Automatyczne zawijanie elementów
- UniformGrid - Jednolite siatki
Główne pliki:
StackPanelView.xaml- Demonstracja StackPanelGridView.xaml- Zaawansowane użycie GridDockPanelView.xaml- Przykłady dokowaniaCanvasView.xaml- Absolutne pozycjonowanieWrapPanelView.xaml- Automatyczne zawijanieUniformGridView.xaml- Jednolite siatki
Lokalizacja: src/RealWorld/
Opis: Praktyczny przykład kompletnej aplikacji biznesowej demonstrującej zastosowanie wszystkich poznanych koncepcji w rzeczywistym projekcie. Aplikacja implementuje zaawansowaną architekturę z podziałem na warstwy (Domain, Infrastructure, ViewModels, WpfApp).
Aplikacja RealWorld wykorzystuje Clean Architecture z podziałem na warstwy:
RealWorld/
├── Domain/ # Warstwa domenowa
├── Infrastructure/ # Warstwa infrastruktury
├── ViewModels/ # Warstwa ViewModels
├── WpfApp/ # Warstwa prezentacji
└── MyApp.sln # Solution file
Lokalizacja: src/RealWorld/Domain/
Opis: Zawiera modele biznesowe i abstrakcje (interfejsy) aplikacji.
Kluczowe komponenty:
- Modele biznesowe:
Customer.cs- Model klienta z adresamiRegion.cs- Model regionuAddress.cs- Model adresuBaseEntity.cs- Klasa bazowa dla encji
- Modele czujników:
Sensor.cs- Klasa bazowa czujnikaTemperatureSensor.cs- Czujnik temperaturyGyroscope.cs- Żyroskop
- Abstrakcje:
ISensorService.cs- Interfejs serwisu czujnikówIRegionService.cs- Interfejs serwisu regionów
Kluczowe cechy:
- Czysta warstwa domenowa bez zależności
- Abstrakcje dla serwisów
- Hierarchia dziedziczenia dla czujników
- Wzorce projektowe (Base Entity, Repository)
Lokalizacja: src/RealWorld/Infrastructure/
Opis: Implementuje interfejsy z warstwy Domain, dostarczając konkretne implementacje serwisów.
Kluczowe komponenty:
FakeSensorService.cs- Implementacja ISensorService z danymi testowymiDbSensorService.cs- Implementacja ISensorService dla bazy danychFakeRegionService.cs- Implementacja IRegionService z danymi testowymi
Kluczowe cechy:
- Implementacja wzorca Repository
- Dane testowe dla rozwoju
- Przygotowanie do integracji z bazą danych
- Dependency Injection ready
Lokalizacja: src/RealWorld/ViewModels/
Opis: Zawiera ViewModels implementujące wzorzec MVVM z logiką biznesową dla interfejsu użytkownika.
Kluczowe komponenty:
BaseViewModel.cs- Klasa bazowa dla wszystkich ViewModelsItemsViewModel<T>.cs- Generyczny ViewModel dla kolekcjiCustomersViewModel.cs- ViewModel dla zarządzania klientamiSensorsViewModel.cs- ViewModel dla zarządzania czujnikamiRegionsViewModel.cs- ViewModel dla zarządzania regionami
Kluczowe cechy:
- Generyczne ViewModels dla różnych typów danych
- Dependency Injection dla serwisów
- Implementacja wzorca MVVM
- Testowalna logika biznesowa
Lokalizacja: src/RealWorld/WpfApp/
Funkcjonalności:
- Zarządzanie klientami (Customers)
- Zarządzanie czujnikami (Sensors) z wizualizacją na mapie
- Zarządzanie regionami (Regions) z czujnikami
- Nowoczesny interfejs użytkownika
- Wzorzec MVVM w praktyce
- Style i zasoby globalne
- Nawigacja między widokami
- Custom Controls
Struktura aplikacji:
WpfApp/
├── Views/
│ ├── ShellView.xaml # Główny kontener aplikacji
│ ├── CustomersView.xaml # Widok zarządzania klientami
│ ├── SensorsView.xaml # Widok zarządzania czujnikami
│ ├── MapSensorsView.xaml # Widok mapy czujników
│ └── RegionsView.xaml # Widok zarządzania regionami
├── CustomControls/
│ └── MapSensors.xaml # Custom Control do wizualizacji czujników
├── Resources/
│ ├── Colors.xaml # Definicje kolorów
│ └── Styles.xaml # Globalne style aplikacji
├── ViewModelLocator.cs # Locator dla Dependency Injection
├── App.xaml # Konfiguracja aplikacji
└── WpfApp.csproj # Konfiguracja projektu
Funkcjonalności:
- Wizualizacja czujników na mapie - Custom Control MapSensors
- Zarządzanie pozycją czujników - Slidery do ustawiania X/Y
- Grupowanie czujników w regiony - Hierarchiczna organizacja
- Zaawansowane style - Spójny design system
- Dependency Injection - Microsoft.Extensions.DependencyInjection
Kluczowe cechy:
- Wykorzystanie wzorca MVVM
- Separacja logiki biznesowej od interfejsu
- Testowalna architektura
- Nowoczesne style i UX
- Custom Controls
- Wizualizacja danych na mapie
git clone https://github.com/sulmar/vavatech-pgz-wpf-mvvm
cd vavatech-pgz-wpf-mvvmcd src
dotnet build# Podstawy XAML
cd Fundamentals/01_XAML/WpfApp
dotnet run
# Widoki
cd ../../02_Views/WpfApp
dotnet run
# Layouty
cd ../../03_Layouts/WpfApp
dotnet run
# Aplikacja biznesowa (RealWorld)
cd ../../RealWorld/WpfApp
dotnet run# Zbuduj całe rozwiązanie RealWorld
cd src/RealWorld
dotnet build
# Uruchom aplikację WpfApp (główna aplikacja)
cd WpfApp
dotnet run
# Testuj poszczególne warstwy
cd ../Domain
dotnet test # jeśli są testy
cd ../Infrastructure
dotnet test # jeśli są testy
cd ../ViewModels
dotnet test # jeśli są testy- Zapoznaj się z podstawami XAML
- Eksperymentuj z różnymi pędzlami
- Zrozum koncepcję zasobów statycznych
- Porównaj WpfApp z WpfOldApp
- Zrozum różnice między UserControl a Window
- Naucz się organizować strukturę aplikacji
- Przetestuj każdy panel układu
- Zrozum kiedy używać którego panelu
- Połącz różne panele w złożone układy
- Architektura aplikacji:
- Przeanalizuj podział na warstwy (Domain, Infrastructure, ViewModels, WpfApp)
- Zrozum zasady Clean Architecture
- Naucz się Dependency Injection
- Warstwa Domain:
- Przeanalizuj modele biznesowe (Customer, Region, Sensor)
- Zrozum hierarchię dziedziczenia czujników
- Naucz się definiować abstrakcje (interfejsy)
- Warstwa Infrastructure:
- Zrozum implementację wzorca Repository
- Naucz się tworzyć serwisy z danymi testowymi
- Przygotuj się do integracji z bazą danych
- Warstwa ViewModels:
- Przeanalizuj generyczne ViewModels
- Zrozum implementację wzorca MVVM
- Naucz się Dependency Injection w ViewModels
- Aplikacja WpfApp:
- Przeanalizuj zaawansowane widoki (Sensors, Regions, MapSensors)
- Naucz się tworzyć Custom Controls
- Zrozum wizualizację danych na mapie
- Naucz się tworzyć skalowalne aplikacje
W przypadku pytań lub problemów:
- Sprawdź dokumentację w folderze
docs/ - Przeanalizuj przykłady kodu
- Skonsultuj się z prowadzącym szkolenie
Ten projekt jest przeznaczony do celów edukacyjnych w ramach szkolenia VavaTech.