xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname="mainregion" />



Podobne dokumenty
Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Przewodnik krok po kroku:

Programowanie obiektowe i zdarzeniowe

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego

Programowanie obiektowe

Tworzenie prezentacji w MS PowerPoint

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

System Obsługi Zleceń

Tworzymy projekt File->New Project->Java Application, przy czym tym razem odznaczamy create main class

Backend Administratora

Laboratorium 6 Tworzenie bloga w Zend Framework

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Programowanie w technologii.net wykład 4 Aplikacja i okna

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Synchroniczne wprowadzanie kontrahentów - SWK Moduł VBA do Symfonia FK Forte.

Instrukcja laboratoryjna cz.3

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Fragmenty są wspierane od Androida 1.6

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

autor poradnika - KS Jak zamieszczać i edytować artykuły na szkolnej stronie internetowej

Zalogowanie generuje nowe menu: okno do wysyłania plików oraz dodatkowe menu Pomoc

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Wprowadzenie do Doctrine ORM

Klasy i obiekty cz II

1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika.

Edycja strony: W edycję danej strony wchodzimy poprzez naciśnięcie opcji

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Spis treści MONITOR PRACY... 4

Tworzenie i wykorzystanie usług sieciowych

Instrukcja obsługi modułu 7 Business Ship Control dla Comarch ERP Optima

MVVM Light Toolkit. Julita Borkowska

Programowanie obiektowe

Ćwiczenia 9 - Swing - część 1

Instrukcja instalacji Control Expert 3.0

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Laboratorium 7 Blog: dodawanie i edycja wpisów

Opis dotyczy wykonania konfiguracji karty przy użyciu oprogramowania SimaticNet PC Software V6.2 oraz Simatic NCM PC.

Rozpoczynając wywód na temat MVVM należy najpierw zadań sobie kilka podstawowych pytań na temat MVVM jako wzorca projektowego :

Programowanie obiektowe

Dokumentacja do API Javy.

Instrukcja laboratoryjna nr.2

5.2. Pierwsze kroki z bazami danych

TIME MARKER. Podręcznik Użytkownika

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Podgląd z rejestratorów IPOX na komputerze z systemem WINDOWS za pomocą programu NVMS-2.0 LITE

2.4 Planowanie i przydzielanie pracy

Instrukcja laboratoryjna

Baza danych sql. 1. Wprowadzenie

1. Aplikacja LOGO! App do LOGO! 8 i LOGO! 7

Ćwiczenie 22 Dynamiczne wczytywanie tekstu z pliku.txt

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Temat 3. Projektowanie interfejsu użytkonwnika Kalkulator pierwszy program dla IOS

Maszyna stanu State Machine

7. Formularze master-detail

Kurs WWW. Paweł Rajba.

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

5.4. Tworzymy formularze

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Założenia projektu: Projekt ma zadanie pokazać praktyczne zastosowanie App Inventor 2, poprzez stworzenie prostej aplikacji do nauki słówek.

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

UONET+ moduł Dziennik. Praca z rozkładami materiału nauczania

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

UONET+ moduł Dziennik. Praca z rozkładami materiału nauczania

Uruchamianie bazy PostgreSQL

Wykład 8: klasy cz. 4

Instalacja i opis podstawowych funkcji programu Dev-C++

Instalacja i konfiguracja serwera IIS z FTP

Informatyka II. Laboratorium Aplikacja okienkowa

Edytor materiału nauczania

Kontenery IoC dla Java Guice 3.0

Programowanie w Javie

Ćwiczenie 1 Galeria zdjęć

7. Tworzenie interfejsu użytkownika w WPF użyciem PRISM 5.0

Git, Bitbucket, IntelliJ IDEA

1. Opis. 2. Wymagania sprzętowe:

1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3

REFERAT O PRACY DYPLOMOWEJ

4. Podstawowa konfiguracja

Aby nadać jej pożądaną postać należy w pliku Window1.xaml stworzyć definicję swojego stylu modyfikując ręcznie postać zapisu XAML:

Archiwum DG 2016 PL-SOFT

Platformy Programowania

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Leszek Stasiak Zastosowanie technologii LINQ w

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Języki i metody programowania Java Lab2 podejście obiektowe

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

MVVM Light Toolkit Przewodnik krok po kroku

System zdalnego dostępu (VPN) do sieci Wydziału Elektrycznego PW

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Transkrypt:

1 Tworzenie Shella a. W pierwszej kolejności tworzymy nowy projekt: WPF Application. Name: Shell SolutionName: PrismApp b. Dodajemy bibliotekę PRISM za pomocą NuGet Managera (dla.net Framework 4.5 Prism 5.0, dla starszych Prism 4.0). Wyszukujemy w NuGetcie frazę Prism i dodajemy tę pozycję 2 Konfiguracja Shella a. Usuwamy MainWindow.xaml z projektu i dodajemy nowe okno (Window WPF) do projektu o nazwie ShellWindow.xaml b. Następnie dodajemy w XAMLu okna Shell definicję przestrzeni nazw: xmlns:prism=http://www.codeplex.com/prism c. Usuwamy Grida i dodajemy: <ContentControl prism:regionmanager.regionname="mainregion" /> Ten kod oznacza że w przypadku kiedy zarejestrujemy widok w naszym module do regionu o nazwie MainRegion, to właśnie pokaże się on w tym miejscu. Shell może zawierać dowolną liczbę regionów, ustawionych w dowolny sposób. Jednakże nie do każdego rodzaju kontrolki można wstawić region. Prism podstawowo dostarcza 4 rodzaje tzw. region adapterów do których można przypisać region. Jednakże istnieje możliwość tworzenia własnych przez co możliwości tworzenia UI są nieograniczone. d. Pełen kod okna Shell: <Window x:class="shell.shellwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="ShellWindow" Height="300" Width="300" xmlns:prism="http://www.codeplex.com/prism"> <ContentControl prism:regionmanager.regionname="mainregion" /> </Window> 3 Klasa inicjalizująca aplikację czyli Bootstrapper: a. Dodajemy klasę o nazwie Bootstrapper.cs, która będzie dziedziczyć po kontenerze (w tym wypadku UnityBootstrapper). By skorzystać z tego kontenera trzeba dodać pakiet NuGeta pod nazwą: Prism.UnityExtensions! b. Następnie musimy przeciążyć metody odpowiedzialne za inicjalizacje i stworzenie naszego okna Shell-a protected override DependencyObject CreateShell() return new ShellWindow(); protected override void InitializeShell() base.initializeshell(); App.Current.MainWindow = (Window)this.Shell; App.Current.MainWindow.Show(); c. Ostatnia metoda jaką musimy dodać to przeciążona metoda konfiguracji katalogu modułów, jako że na tym etapie nie dodajemy żadnego modułu to póki co zostanie ona pusta. base.configuremodulecatalog();

d. Ostatnią rzeczą jaką musimy zrobić, to zapewnić aby podczas uruchamiania naszej aplikacji pierwsza uruchamiała się klasa Bootstrapera Otwieramy plik App.xaml.cs i przeciążamy metodę OnStartup. protected override void OnStartup(StartupEventArgs e) base.onstartup(e); Bootstrapper bootstrapper = new Bootstrapper(); bootstrapper.run(); Otwieramy plik App.xaml i warto pokazać że uruchamiają się dwa okna zmieniając na StartupUri= ShellWindow.xaml Usuwamy znacznik StartupUri= ShellWindow.xaml Po tych zabiega powinniśmy mieć gotowy bootstraper. 4 Dodanie pierwszego modułu a. Dodajemy nowy projekt do solucji, nazwijmy go ModuleA, jak typ projektu wybieramy WPF User Control Libary. Po jego utworzeniu usuwamy domyślnie stworzoną kontrolkę UserControl1.xaml. b. Dodajemy referencje Prisma oraz Prism.UnityExtensions poprzez konfiguracje pakietu Nugeta do nowo utworzonego projektu modułu. c. W projekcie modułu dodajemy nową klasę ModuleA.cs, robimy ja publiczną oraz implementujemy interfejs IModule. Jest to główna klasa naszego modułu, w której to będziemy rejestrować nasze widoki, view modele, usługi itd. d. Dodajemy zmienną RegionManager typu IRegionManager, która posłuży nam do rejestrowania widoków do odpowiednich regionów w shellu. e. Tworzymy konstruktor który przyjmuje wstrzyknięty IRegionManager, następnie w konstruktorze przypisujemy wcześniej wstrzyknięty regionmanager do naszej zmiennej. public class ModuleA : IModule protected IRegionManager RegionManager get; private set; public ModuleA(IRegionManager regionmanager) RegionManager = regionmanager; throw new NotImplementedException(); Póki co metodę Initialize() zostawiamy do czasu aż nie stworzymy widoku. 5 Dodajemy widok modułu. a. Do projektu modułu dodajemy User Control (WPF) i nazywamy ją np.: ModuleAView b. Edytujemy XAMLa dodanej kontrolki dodając np.: <Label Content="Widok z Modułu A" FontSize="15" Background="Aquamarine" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> c. Wracamy do metody Initialize w klasie ModuleA i za pomocą wstrzykniętego Region Managera rejestrujemy widok. RegionManager.RegisterViewWithRegion("MainRegion", typeof(moduleaview)); Tak zarejestrowany widok pokaże się automatycznie zaraz po inicjalizacji modułu. Jednakże póki co jeszcze nic nie zobaczymy ponieważ trzeba zarejestrować nasz moduł w klasie bootstrappera.

d. Wracamy do klasy bootstrappera i zmieniamy metodę ConfigureModuleCatalog. base.configuremodulecatalog(); ModuleCatalog modulecatalog = (ModuleCatalog)this.ModuleCatalog; modulecatalog.addmodule(typeof(modulea.modulea)); Trzeba też nadmienić że istnieją jeszcze inne sposoby rejestrowania modułów, pokazana tutaj metoda nie jest najbardziej elegancka gdyż wymaga dodania refencji modułu do shella. Z innych metod dodawania to min: rejestrowanie modułów z fizycznego folderu na dysku, czy też z plików konfiguracyjnych. Aby wszystko działało musimy dodać referencje w naszym Shellu i podpiąć nasz ModuleA oraz dodać przestrzeń nazw obsługującą moduły z biblioteki Prism. 6 Dodawanie drugiego modułu i przełączania pomiędzy nimi. Nasza aplikacja powinna posiadać menu i będzie nim dodatkowy widok w naszym module lecz wyświetlany w innym regionie. By przełączać się powinniśmy posiadać inne widoki lub widoki w ogóle innym module, tak też zrobimy. Tak będzie wyglądać nasza aplikacja: a. Na początek trzeba edytować Shell i dodać region w którym będziemy wyświetlać widoki przycisków przełączających widok w naszym głównym regionie o nazwie Main Region. <Grid> <Grid.RowDefinitions> <RowDefinition Height="5*"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <ContentControl Grid.Row="0" Grid.ColumnSpan="2" prism:regionmanager.regionname="mainregion" /> <ContentControl Grid.Row="1" Grid.Column="0" prism:regionmanager.regionname="menuregiona" /> <ContentControl Grid.Row="1" Grid.Column="1" prism:regionmanager.regionname="menuregionb" /> </Grid> b. Następnie do projektu modułu A dodajemy widok (Add User Control WPF), który będzie elementem naszego menu o nazwie ButtonViewA, będzie to zwykły buton pod który później

podepniemy komendę. Po jego dodaniu zarejestrujmy go w klasie modułu, tak aby był widoczny od razu po jego załadowaniu. Tym razem ten widok rejestrujemy do regionu o nazwie MenuRegionA, który skonfigurowaliśmy przed chwilą w Shellu. Zmieniamy również sposób w jaki będziemy pokazywać nasz widok w regionie MainRegion. Zamiast rejestrować go od razu do region managera zarejestrujemy go do kontenera, którego instancje wcześniej musimy pobrać chociażby np. w konstruktorze. public class ModuleA : IModule protected IRegionManager RegionManager get; private set; protected IUnityContainer Container get; private set; public ModuleA(IRegionManager regionmanager, IUnityContainer container) Container = container; RegionManager = regionmanager; Container.RegisterType<Object, ModuleAView>(typeof(ModuleAView).Name); RegionManager.RegisterViewWithRegion("MenuRegionA", typeof(buttonviewa)); c. Dodajemy teraz projekt drugiego modułu analogicznie jak w przypadku modułu A(User Control Library). Nazwijmy go ModuleB i nie zapomnijmy dodać go do katalogu modułów w klasie bootstrappera. modulecatalog.addmodule(typeof(moduleb.moduleb)); Uprzednio dodając referencje naszego modułu do projektu Shell oraz do samego modułu referencje Prisma i Prism.UnityExtensions. Dodajmy do niego również klasę i widoki podobnie jak mamy je zorganizowane w pierwszym module i tak samo zarejestrujemy w metodzie Initialize. Kod widoku ModuleBView: <Label Content="Widok z Modułu B" FontSize="15" Background="BurlyWood" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> Dodany został inny kolor tak aby można było odróżniać widoki. d. Tak skonfigurowaną aplikację mamy prawie gotową. Pozostał jeszcze ważny element czyli View Modele do widoków gdzie będziemy bindować nasze komendy przełączające widoki. Poniższe czynności wykonujemy dla każdego z modułów. Dodajemy klasę view modelu i wykonujemy w niej następujące czynności 1. Pobieramy instancję region menadżera z pomocą ServiceLocatora 2. Tworzymy komendę typu DelegateCommand i inicjalizujemy ją w konstruktorze view modelu. 3. Do naszej komendy dodajemy metodę SwitchView, w ciele tej metody wykonujemy metodę region managera RequestNavigate w której okeślamy do jakiego regionu wstawiamy widok oraz jaki widok określany po jego nazwie użytej podczas rejestrowania widoku kontenera. public class ButtonViewBViewModel private readonly IRegionManager regionmanager; public DelegateCommand SwitchViewCommand get; set;

public ButtonViewBViewModel() regionmanager = ServiceLocator.Current.GetInstance<IRegionManager>(); SwitchViewCommand = new DelegateCommand(SwitchView); private void SwitchView() regionmanager.requestnavigate("mainregion", new Uri("ModuleBView", UriKind.Relative)); Nie trzeba dziedziczyć po INotifyPropertyChanged ponieważ Prism robi to za nas. Łączymy nasz view model z Data Contextem naszego widoku: public partial class ButtonViewB : UserControl public ButtonViewB() InitializeComponent(); this.datacontext = new ButtonViewBViewModel(); i ostatecznie bindujemy naszą komendę w XAMLu: <Button Content="Przełącz na widok B" Command="Binding SwitchViewCommand" /> Te same czynności powtarzamy dla modułu A. Nasza aplikacja skończona. Notka: Jeśli chcemy by przy odpalaniu aplikacji pojawiał się domyślnie widok z modułu A to w metodzie Initialize modułu A dodajemy dodatkową linię: RegionManager.RegisterViewWithRegion("MainRegion", typeof(moduleaview)); Można tę linijkę dodać również w Module B i zamienić kolejność inicjacji modułów w Bootstraperze na: //[ ] modulecatalog.addmodule(typeof(moduleb.moduleb)); modulecatalog.addmodule(typeof(modulea.modulea)); Widać wtedy, że ta kolejność decyduje o tym jaki widok zostanie wczytany. Koniec