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

Podobne dokumenty
xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Przewodnik krok po kroku:

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

MVVM Light Toolkit Przewodnik krok po kroku

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

Programownie w technologii.net wykład 6 Element Binding i Data Binding

Budowa aplikacji w technologii.net wykład 7 konwersja, walidacja, szablony, widoki

Programowanie obiektowe i zdarzeniowe

Instrukcja laboratoryjna cz.7

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

MVVM Light Toolkit. Julita Borkowska

Instrukcja laboratoryjna cz.4

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

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

Windows Phone XML WG MICROSOFT GUI. Schemat w dokumencie. Schemat w pliku zewnętrznym. Visual Studio: Properties pliku xml-owego

POLITECHNIKA POZNAŃSKA. Oprogramowanie dla telefonów z systemem Windows Phone 8 obsługujących technologię NFC do sprawdzania listy obecności.

Programowanie obiektowe

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

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

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

Zdarzenia i polecenia

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

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

Programowanie obiektowe

Tworzenie i wykorzystanie usług sieciowych

Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja. Paweł Paduch paduch@tu.kielce.pl

Henryk Budzisz. materiały przygotowane w ramach projektu ZPORR nr POKL /08-00

Klasy i obiekty cz II

Programowanie obiektowe i zdarzeniowe wykład 3 Okna i kontrolki

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Algorytmy i Struktury Danych. Anna Paszyńska

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

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Backend Administratora

Kurs WWW. Paweł Rajba.

Modele zawartości. WPF wykorzystuje 4 modele zawartości kontrolek: ContentControl pojedyncza zawartość

Programowanie obiektowe

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

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Programowanie dla iphone projektowanie interfejsu użytkownika

Instrukcja laboratoryjna cz.6

Aplikacje w środowisku Java

using System;... using System.Threading;

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

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Laboratorium 6 Tworzenie bloga w Zend Framework

Przykładowa implementacja

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

MVC w praktyce tworzymy system artykułów. cz. 1

Fragmenty są wspierane od Androida 1.6

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

Informatyka II. Laboratorium Aplikacja okienkowa

Silverlight. Od podstaw

System zdarzeń - wyzwalanie i nasłuchiwanie

Template method (metoda szablonowa)

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

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.

Programowanie 2. Język C++. Wykład 3.

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

Laboratorium programowania urządzeń mobilnych

Klasy abstrakcyjne, interfejsy i polimorfizm

Laboratorium 10 - Web Services

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Instrukcja laboratoryjna cz.3

Laboratorium 1 - Programowanie proceduralne i obiektowe

XAML Extensible Application Markup Language

Metodyki zwinne wytwarzania oprogramowania

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak


Programowanie obiektowe i zdarzeniowe

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Wykład 5 Okna MDI i SDI, dziedziczenie

Wzorce prezentacji internetowych

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Zaawansowane aplikacje internetowe laboratorium REST

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Aplikacje w środowisku Java

Instrukcja laboratoryjna cz.3

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Programowanie obiektowe

Instrukcja laboratoryjna nr.4

Leszek Stasiak Zastosowanie technologii LINQ w

Serwery aplikacji. dr Radosław Matusik. radmat

Zaawansowane aplikacje internetowe - laboratorium

Programowanie aplikacji mobilnych z użyciem Xamarin i MvvmCross

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Przypomnienie o klasach i obiektach

Android pierwsza aplikacja

Pakiety i interfejsy. Tomasz Borzyszkowski

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Aplikacje RMI Lab4

Instrukcja obsługi programu:

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

Programowanie w technologii.net wykład 8 Style, listy, drzewa, toolbary, menu

public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name;

Rozdział 4 KLASY, OBIEKTY, METODY

Transkrypt:

Rozwój aplikacji modułowych Paweł Brudnicki Moduł jest podstawową jednostką funkcjonalności. Stanowi on część, która może być niezależnie pisana, testowana a nawet wdrażana. W przewodniku dodamy niezależny moduł do aplikacji napisanej przez poprzedniego prelegenta. Dodanie modułu Dodajemy do solucji nowy projekt typu WPF User Control Library o nazwie ModuleC. Następnie usuwamy domyślnie stworzoną kontrolkę UserControl1.xaml. Dodajemy dwie referencje do projektu : Prism oraz Prism.UnityExtensions Dodajemy do projektu klasę ModuleC.cs. Posłuży ona do rejestrowania widoków, view modeli itd.. public class ModuleC : IModule protected IRegionManager RegionManager ; private set; public ModuleC(IRegionManager regionmanager, IUnityContainer container) RegionManager = regionmanager; public void Initialize() throw new NotImplementedException(); Dodajemy widok projektu dodajemy User Control o nazwie ModuleCView Edytujemy jej kod

<UserControl x:class="modulec.modulecview" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:prism="clrnamespace:microsoft.practices.prism.mvvm;assembly=microsoft.practices.prism.mvvm.desktop" prism:viewmodellocator.autowireviewmodel="true" mc:ignorable="d" d:designheight="300" d:designwidth="900"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="1*"/> <RowDefinition Height="5*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="550*"/> <ColumnDefinition Width="30*"/> </Grid.ColumnDefinitions> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0"> <Button Content="Add to Cart" Command="Binding AddToCartCommand" CommandParameter="Binding ElementName=ListV, Path=SelectedItem" Margin="0,0,5,0"/> <Button Content="Remove form Cart" Command="Binding RemoveFromCartCommand" CommandParameter="Binding ElementName=Cart, Path=SelectedItem" Width="114"/> <StackPanel Grid.Row="1" Grid.Column="3"> <Label>Suma</Label> <TextBox Text="Binding Suma" /> <Button Content="Sum" Command="Binding SumCommand"/> <ListView ItemsSource="Binding Products" Background="Azure" Grid.Row="1" x:name="listv"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="Binding Name"/> <TextBlock Text="Binding Price"/> </DataTemplate> </ListView.ItemTemplate> </ListView>

Następnie w klasie ModuleC rejestrujemy widok public void Initialize() Container.RegisterType<Object, ModuleCView>(typeof(ModuleCView).Name); RegionManager.RegisterViewWithRegion("MenuRegionC", typeof(buttonviewc)); W klasie Bootsraper dodajemy moduł do katalogu protected override void ConfigureModuleCatalog() base.configuremodulecatalog(); ModuleCatalog modulecatalog = (ModuleCatalog)this.ModuleCatalog; modulecatalog.addmodule(typeof(modulea.modulea)); modulecatalog.addmodule(typeof(moduleb.moduleb)); modulecatalog.addmodule(typeof(modulec.modulec));. Dodanie viewmodelu ViewModel pozwoli nam na integrację modelu z widokiem. Tworzymy klasę o nazwie ModuleCViewViewModel Definiujemy własności Stworzenie własności wraz użyciem InotifyPropertyChanged umożliwi nam dynamiczną zmianę zawartości pól, które zostały stworzone w widoku. Własności bindowane są z textboxami.

public decimal Suma return suma; set SetProperty<decimal>(ref suma, value); public ObservableCollection<Product> ProductsInChart return cart; protected set SetProperty<ObservableCollection<Product>>(ref cart, value); public ObservableCollection<Product> Products return products; protected set SetProperty<ObservableCollection<Product>>(ref products, value);

Implementujemy konstruktor, w którym deklarujemy komendy oraz importujemy dane z repozytorium. protected IProductRepository productsrepository; public ModuleCViewViewModel(IProductRepository productsrepository) this.productsrepository = productsrepository; AddToCartCommand = new DelegateCommand<Product>(AddToCart); RemoveFromCartCommand = new DelegateCommand<Product>(RemoveFromCart); SumCommand = new DelegateCommand(Sum); this.products = new ObservableCollection<Product>(this.productsRepository.GetAll()); cart = new ObservableCollection<Product>(); na sam koniec dodajemy komendy, które są podpięte do przycisków private void AddToCart(Product product) ProductsInChart.Add(product); private void RemoveFromCart(Product product) ProductsInChart.Remove(product); private void Sum() Suma = ProductsInChart.Sum(x => x.price); Aplikacje modułowe dają programiście bardzo duże możliwości. Sprzyjają one pracy zespołowej, ponieważ programiści mogą tworzyć moduły niezależnie od siebie. Ewentualne problemy z jednym modułem nie wpływają bowiem, na działanie innych.