SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Warsztaty Windows 10 UWP
Hubert Taler
Tomasz Szczuko
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
WPF
Windows Presentation Foundation (WPF) – nazwa silnika graficznego i API bazującego na .NET 3.
WPF integruje interfejs użytkownika, grafikę 2D i 3D,multimedia, dokumenty (nazwa kodowa Metro) oraz
generowanie/rozpoznawanie mowy.
API w WPF opiera się na języku XML, dokładniej na jego implementacji o nazwie XAML
<StackPanel x:Name="contentPanel" Margin="8,32,0,0">
<TextBlock Text="Hello, world!" Margin="0,0,0,40"/>
<TextBlock Text="What's your name?"/>
<StackPanel x:Name="inputPanel" Orientation="Horizontal" Margin="
0,20,0,20">
<TextBox x:Name="nameInput" Width="280" HorizontalAlignment="
Left"/>
<Button x:Name="inputButton" Content="Say &quot;Hello&quot;"/>
</StackPanel>
<TextBlock x:Name="greetingOutput"/>
</StackPanel>
WPF - Przegląd kontrolek
Panele :
● Grid - układ tabelaryczny (kolumny, wiersze)
● StackPanel - poziome lub pionowe rozmieszczenie
● WrapPanel - zwijany StackPanel
● DockPanel - panel dokujący
● Canvas - obszar roboczy
● Hub - nagłówek, sekcje
● RelativePanel - UWP
● SplitView - UWP
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
Różnice między wzorcami
W MVC kontroler obsługuje zdarzenia, manipuluje modelem, który zawiera logikę
biznesową, widok wyświetla dane z modelu. Jeden kontroler obsługuje kilka widoków.
W MVP dane z modelu są przekazywane do presentera a nie bezpośrednio do widoku,
presenter przekazuje je do widoku. Jeden presenter odnosi się do jednego widoku.
W MVVM dane z modelu są przekazywane do VievModelu, który może obsługiwać kilka
widoków. Widok nie wie nic o ViewModelu, wymaga tylko potrzebnych danych.
MVVM
● It separates the business and presentation layers, like MVP and MVC.
● Improve Structure/separation of concerns (View, ViewModel and Model).
● Enable a better Design/Developer Workflow.
● Enhance simplicity and testability.
● Enabled by the robust data binding capability of XAML.
● No need to use a code behind file (minimalist code-behind file).
● Provides application development ability for multiple environments.
● Powerful Data Binding, command, validation and much more.
● The designer and developer can work together.
Wady MVVM
● komplikacja kodu - ViewModel nie może komunikować się z warstwą View,
co w pewnych sytuacjach bardzo komplikuje powiązania,
● do obsługi jednego widoku należy tworzyć wiele klas, co sprawia że projekt
jest bardziej rozbudowany,
● duża ilość klas bazowych.
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
Model
public class Person
{
public String FirstName { get; set; }
public String LastName { get; set; }
public Person(String First, String Last)
{
FirstName = First;
LastName = Last;
}
}
View Model
public ObservableCollection<Person> Persons { get; set; }
public PersonViewModel()
{
Persons = new ObservableCollection<Person>()
{
new Person("Jan", "Kowalski"),
new Person("John","Smith")
};
}
View
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView ItemsSource="{Binding Persons}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" Name="FirstName" Text="{Binding FirstName}" Width="120" />
<TextBox Height="23" Name="LastName" Text="{Binding LastName}" Width="120" />
<Button Command="{Binding SaveCmd}" Height="30" Width="80">Zapisz</Button>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:WpfApplication1.ViewModel"
Title="MainWindow" Height="350" Width="525">
<Grid DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"/>
</Window>
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● UWP, Adaptive triggers -> live coding
● Wasze pytania
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent(
"Windows.Phone.UI.Input.HardwareButtons"))
{
Windows.Phone.UI.Input.HardwareButtons.CameraPressed +=
HardwareButtons_CameraPressed;
}
public Platform DetectPlatform()
{
bool isHardwareButtonsAPIPresent = ApiInformation.IsTypePresent("Windows.Phone.UI.Input.
HardwareButtons");
if (isHardwareButtonsAPIPresent)
{
return Platform.WindowsPhone;
} else
{
return Platform.Windows;
}
}
if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile")
{
// code for phone
}
else
{
// other code
}
AdaptiveTrigger - live coding
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="WideState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LayoutRoot.Background"
Value="Green" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="NarrowState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LayoutRoot.Background"
Value="Red" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● UWP, RelativePanel -> live coding
● Wasze pytania
<RelativePanel BorderBrush="Gray" BorderThickness="10">
<Rectangle x:Name="RedRect" Fill="Red" MinHeight="100" MinWidth="100"/>
<Rectangle x:Name="BlueRect" Fill="Blue" MinHeight="100" MinWidth="100"
RelativePanel.RightOf="RedRect" />
<!-- Width is not set on the green and yellow rectangles.
It's determined by the RelativePanel properties. -->
<Rectangle x:Name="GreenRect" Fill="Green" MinHeight="100" Margin="0,5,0,0"
RelativePanel.Below="RedRect"
RelativePanel.AlignLeftWith="RedRect"
RelativePanel.AlignRightWith="BlueRect"/>
<Rectangle Fill="Yellow" MinHeight="100"
RelativePanel.Below="GreenRect"
RelativePanel.AlignLeftWith="BlueRect"
RelativePanel.AlignRightWithPanel="True"/>
</RelativePanel>
RelativePanel
RelativePanel
<RelativePanel>
<Rectangle x:Name="Red" Height="100" Width="200" Fill="Red"/>
<Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue"
RelativePanel.Below="Red"
RelativePanel.AlignRightWith="Red"/>
</RelativePanel>
RelativePanel - priorytety
● Panel alignment relationships (AlignTopWithPanel, AlignLeftWithPanel ...)
● Sibling alignment relationships (AlignTopWith, AlignLeftWith ...)
● Sibling positional relationships (Above, Below, RightOf, LeftOf)
RelativePanel - zagrożenie 1
<RelativePanel>
<Rectangle x:Name="Red" Height="100" Width="200" Fill="Red"/>
<Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue"
RelativePanel.Below="Red"
RelativePanel.LeftOf="Red"/>
</RelativePanel>
RelativePanel - zagrożenie 2
<RelativePanel>
<Rectangle x:Name="Red" Height="100" Width="200" Fill="Red"
RelativePanel.AlignHorizontalCenterWith="Blue"
RelativePanel.LeftOf="Blue"/>
<Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue"
RelativePanel.AlignHorizontalCenterWithPanel="True"
RelativePanel.AlignVerticalCenterWithPanel="True"/>
</RelativePanel>
RelativePanel - zagrożenie 3
<RelativePanel>
<Rectangle x:Name="Red" Height="100" Width="200" Fill="Red"
RelativePanel.Above="Blue"/>
<Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue"
RelativePanel.Below="Red"/>
</RelativePanel>
RelativePanel - Live coding
…
<RelativePanel HorizontalAlignment="Stretch"
Margin="20">
<TextBlock Text="First name"
x:Name="FirstNameLabel"
Margin="0,5,10,5"/>
<TextBox x:Name="FirstNameText"
Width="300" />
</RelativePanel>
…
<Setter Target="FirstNameText.(RelativePanel.RightOf)"
Value="FirstNameLabel" />
...
<Setter Target="FirstNameText.(RelativePanel.Below)"
Value="FirstNameLabel" />
...
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● UWP, DeviceFamily specific views -> live coding
● Wasze pytania
DeviceFamily specific views - Type folder
DeviceFamily specific views - Type in file name
DeviceFamily specific views - overload
public MainPage()
{
if (AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile")
{
if (usePrimary)
{
InitializeComponent(new Uri("ms-appx:///PrimaryMainPage.xaml", UriKind.Absolute));
}
else
{
InitializeComponent(new Uri("ms-appx:///SecondaryMainPage.xaml", UriKind.Absolute));
}
}
else
{
InitializeComponent();
}
}
● Informacje o środowisku pracy programisty
● WPF - co to właściwie jest? Kontrolki, layout
● Informacje o architekturze MVVM
● Pierwsza aplikacja MVVM -> live coding
● MVVM Light
● Aplikacja uniwersalna - co to jest?
● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding
● Wasze pytania
Thank
you!

Contenu connexe

Similaire à Patronage 2016 Windows 10 Warsztaty

Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Future Processing
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?PHPCon Poland
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITRedge Technologies
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationMariusz Koprowski
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Tomasz Cieplak
 
MvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.AndroidMvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.AndroidIn'saneLab
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftBiznes 2.0
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureWebhosting.pl
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?tkryskiewicz
 
PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]Droptica
 
[CareerCon] Wirtualizacja (PL)
[CareerCon] Wirtualizacja (PL)[CareerCon] Wirtualizacja (PL)
[CareerCon] Wirtualizacja (PL)Jaroslaw Sobel
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 

Similaire à Patronage 2016 Windows 10 Warsztaty (20)

Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.
 
Silverlight i PHP
Silverlight i PHPSilverlight i PHP
Silverlight i PHP
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
 
SOLIDWORKS system 3d cad
SOLIDWORKS system 3d cadSOLIDWORKS system 3d cad
SOLIDWORKS system 3d cad
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005
 
MvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.AndroidMvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.Android
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows Azure
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
 
PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]
 
university day 1
university day 1university day 1
university day 1
 
[CareerCon] Wirtualizacja (PL)
[CareerCon] Wirtualizacja (PL)[CareerCon] Wirtualizacja (PL)
[CareerCon] Wirtualizacja (PL)
 
Budowanie sieci Grid
Budowanie sieci GridBudowanie sieci Grid
Budowanie sieci Grid
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 

Plus de intive

Rok z Android MVVM
Rok z Android MVVMRok z Android MVVM
Rok z Android MVVMintive
 
Don't Forget About the Layout
Don't Forget About the LayoutDon't Forget About the Layout
Don't Forget About the Layoutintive
 
You Don't Need Dependency Injection
You Don't Need Dependency InjectionYou Don't Need Dependency Injection
You Don't Need Dependency Injectionintive
 
OWASP Open SAMM
OWASP Open SAMMOWASP Open SAMM
OWASP Open SAMMintive
 
Porównanie architektur MVVM i MVC (iOS)
Porównanie architektur MVVM i MVC (iOS)Porównanie architektur MVVM i MVC (iOS)
Porównanie architektur MVVM i MVC (iOS)intive
 
Wprowadzenie do CoreBluetooth
Wprowadzenie do CoreBluetoothWprowadzenie do CoreBluetooth
Wprowadzenie do CoreBluetoothintive
 
.Net anywhere
.Net anywhere.Net anywhere
.Net anywhereintive
 
Front end - advanced development for beginners
Front end - advanced development for beginnersFront end - advanced development for beginners
Front end - advanced development for beginnersintive
 
Kotlin, Spek and tests
Kotlin, Spek and testsKotlin, Spek and tests
Kotlin, Spek and testsintive
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2intive
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołuintive
 
Organizacja zespołu
Organizacja zespołuOrganizacja zespołu
Organizacja zespołuintive
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówintive
 
[PL] MVP do MVVM - separacja warstw w aplikacji androidowej
[PL] MVP do MVVM - separacja warstw w aplikacji androidowej[PL] MVP do MVVM - separacja warstw w aplikacji androidowej
[PL] MVP do MVVM - separacja warstw w aplikacji androidowejintive
 
Tips & Tricks Android
Tips & Tricks AndroidTips & Tricks Android
Tips & Tricks Androidintive
 
Apple Watch - Getting Started
Apple Watch - Getting StartedApple Watch - Getting Started
Apple Watch - Getting Startedintive
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Androidintive
 
CoreLocation (iOS) in details
CoreLocation (iOS) in detailsCoreLocation (iOS) in details
CoreLocation (iOS) in detailsintive
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practiceintive
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programmingintive
 

Plus de intive (20)

Rok z Android MVVM
Rok z Android MVVMRok z Android MVVM
Rok z Android MVVM
 
Don't Forget About the Layout
Don't Forget About the LayoutDon't Forget About the Layout
Don't Forget About the Layout
 
You Don't Need Dependency Injection
You Don't Need Dependency InjectionYou Don't Need Dependency Injection
You Don't Need Dependency Injection
 
OWASP Open SAMM
OWASP Open SAMMOWASP Open SAMM
OWASP Open SAMM
 
Porównanie architektur MVVM i MVC (iOS)
Porównanie architektur MVVM i MVC (iOS)Porównanie architektur MVVM i MVC (iOS)
Porównanie architektur MVVM i MVC (iOS)
 
Wprowadzenie do CoreBluetooth
Wprowadzenie do CoreBluetoothWprowadzenie do CoreBluetooth
Wprowadzenie do CoreBluetooth
 
.Net anywhere
.Net anywhere.Net anywhere
.Net anywhere
 
Front end - advanced development for beginners
Front end - advanced development for beginnersFront end - advanced development for beginners
Front end - advanced development for beginners
 
Kotlin, Spek and tests
Kotlin, Spek and testsKotlin, Spek and tests
Kotlin, Spek and tests
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołu
 
Organizacja zespołu
Organizacja zespołuOrganizacja zespołu
Organizacja zespołu
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistów
 
[PL] MVP do MVVM - separacja warstw w aplikacji androidowej
[PL] MVP do MVVM - separacja warstw w aplikacji androidowej[PL] MVP do MVVM - separacja warstw w aplikacji androidowej
[PL] MVP do MVVM - separacja warstw w aplikacji androidowej
 
Tips & Tricks Android
Tips & Tricks AndroidTips & Tricks Android
Tips & Tricks Android
 
Apple Watch - Getting Started
Apple Watch - Getting StartedApple Watch - Getting Started
Apple Watch - Getting Started
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Android
 
CoreLocation (iOS) in details
CoreLocation (iOS) in detailsCoreLocation (iOS) in details
CoreLocation (iOS) in details
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practice
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programming
 

Patronage 2016 Windows 10 Warsztaty

  • 1. Warsztaty Windows 10 UWP Hubert Taler Tomasz Szczuko
  • 2. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania
  • 3.
  • 4. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania
  • 5. WPF Windows Presentation Foundation (WPF) – nazwa silnika graficznego i API bazującego na .NET 3. WPF integruje interfejs użytkownika, grafikę 2D i 3D,multimedia, dokumenty (nazwa kodowa Metro) oraz generowanie/rozpoznawanie mowy. API w WPF opiera się na języku XML, dokładniej na jego implementacji o nazwie XAML <StackPanel x:Name="contentPanel" Margin="8,32,0,0"> <TextBlock Text="Hello, world!" Margin="0,0,0,40"/> <TextBlock Text="What's your name?"/> <StackPanel x:Name="inputPanel" Orientation="Horizontal" Margin=" 0,20,0,20"> <TextBox x:Name="nameInput" Width="280" HorizontalAlignment=" Left"/> <Button x:Name="inputButton" Content="Say &quot;Hello&quot;"/> </StackPanel> <TextBlock x:Name="greetingOutput"/> </StackPanel>
  • 6. WPF - Przegląd kontrolek Panele : ● Grid - układ tabelaryczny (kolumny, wiersze) ● StackPanel - poziome lub pionowe rozmieszczenie ● WrapPanel - zwijany StackPanel ● DockPanel - panel dokujący ● Canvas - obszar roboczy ● Hub - nagłówek, sekcje ● RelativePanel - UWP ● SplitView - UWP
  • 7. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania
  • 8.
  • 9. Różnice między wzorcami W MVC kontroler obsługuje zdarzenia, manipuluje modelem, który zawiera logikę biznesową, widok wyświetla dane z modelu. Jeden kontroler obsługuje kilka widoków. W MVP dane z modelu są przekazywane do presentera a nie bezpośrednio do widoku, presenter przekazuje je do widoku. Jeden presenter odnosi się do jednego widoku. W MVVM dane z modelu są przekazywane do VievModelu, który może obsługiwać kilka widoków. Widok nie wie nic o ViewModelu, wymaga tylko potrzebnych danych.
  • 10.
  • 11. MVVM ● It separates the business and presentation layers, like MVP and MVC. ● Improve Structure/separation of concerns (View, ViewModel and Model). ● Enable a better Design/Developer Workflow. ● Enhance simplicity and testability. ● Enabled by the robust data binding capability of XAML. ● No need to use a code behind file (minimalist code-behind file). ● Provides application development ability for multiple environments. ● Powerful Data Binding, command, validation and much more. ● The designer and developer can work together.
  • 12. Wady MVVM ● komplikacja kodu - ViewModel nie może komunikować się z warstwą View, co w pewnych sytuacjach bardzo komplikuje powiązania, ● do obsługi jednego widoku należy tworzyć wiele klas, co sprawia że projekt jest bardziej rozbudowany, ● duża ilość klas bazowych.
  • 13. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania
  • 14. Model public class Person { public String FirstName { get; set; } public String LastName { get; set; } public Person(String First, String Last) { FirstName = First; LastName = Last; } }
  • 15. View Model public ObservableCollection<Person> Persons { get; set; } public PersonViewModel() { Persons = new ObservableCollection<Person>() { new Person("Jan", "Kowalski"), new Person("John","Smith") }; }
  • 16. View <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ListView ItemsSource="{Binding Persons}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBox Height="23" Name="FirstName" Text="{Binding FirstName}" Width="120" /> <TextBox Height="23" Name="LastName" Text="{Binding LastName}" Width="120" /> <Button Command="{Binding SaveCmd}" Height="30" Width="80">Zapisz</Button> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid>
  • 17. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania
  • 18.
  • 20. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania
  • 21.
  • 22.
  • 23. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● UWP, Adaptive triggers -> live coding ● Wasze pytania
  • 25. public Platform DetectPlatform() { bool isHardwareButtonsAPIPresent = ApiInformation.IsTypePresent("Windows.Phone.UI.Input. HardwareButtons"); if (isHardwareButtonsAPIPresent) { return Platform.WindowsPhone; } else { return Platform.Windows; } }
  • 26. if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile") { // code for phone } else { // other code }
  • 27. AdaptiveTrigger - live coding <Grid x:Name="LayoutRoot"> <VisualStateManager.VisualStateGroups> <VisualStateGroup> <VisualState x:Name="WideState"> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="600" /> </VisualState.StateTriggers> <VisualState.Setters> <Setter Target="LayoutRoot.Background" Value="Green" /> </VisualState.Setters> </VisualState> <VisualState x:Name="NarrowState"> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="0" /> </VisualState.StateTriggers> <VisualState.Setters> <Setter Target="LayoutRoot.Background" Value="Red" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Grid>
  • 28. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● UWP, RelativePanel -> live coding ● Wasze pytania
  • 29. <RelativePanel BorderBrush="Gray" BorderThickness="10"> <Rectangle x:Name="RedRect" Fill="Red" MinHeight="100" MinWidth="100"/> <Rectangle x:Name="BlueRect" Fill="Blue" MinHeight="100" MinWidth="100" RelativePanel.RightOf="RedRect" /> <!-- Width is not set on the green and yellow rectangles. It's determined by the RelativePanel properties. --> <Rectangle x:Name="GreenRect" Fill="Green" MinHeight="100" Margin="0,5,0,0" RelativePanel.Below="RedRect" RelativePanel.AlignLeftWith="RedRect" RelativePanel.AlignRightWith="BlueRect"/> <Rectangle Fill="Yellow" MinHeight="100" RelativePanel.Below="GreenRect" RelativePanel.AlignLeftWith="BlueRect" RelativePanel.AlignRightWithPanel="True"/> </RelativePanel> RelativePanel
  • 30. RelativePanel <RelativePanel> <Rectangle x:Name="Red" Height="100" Width="200" Fill="Red"/> <Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue" RelativePanel.Below="Red" RelativePanel.AlignRightWith="Red"/> </RelativePanel>
  • 31. RelativePanel - priorytety ● Panel alignment relationships (AlignTopWithPanel, AlignLeftWithPanel ...) ● Sibling alignment relationships (AlignTopWith, AlignLeftWith ...) ● Sibling positional relationships (Above, Below, RightOf, LeftOf)
  • 32. RelativePanel - zagrożenie 1 <RelativePanel> <Rectangle x:Name="Red" Height="100" Width="200" Fill="Red"/> <Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue" RelativePanel.Below="Red" RelativePanel.LeftOf="Red"/> </RelativePanel>
  • 33. RelativePanel - zagrożenie 2 <RelativePanel> <Rectangle x:Name="Red" Height="100" Width="200" Fill="Red" RelativePanel.AlignHorizontalCenterWith="Blue" RelativePanel.LeftOf="Blue"/> <Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue" RelativePanel.AlignHorizontalCenterWithPanel="True" RelativePanel.AlignVerticalCenterWithPanel="True"/> </RelativePanel>
  • 34. RelativePanel - zagrożenie 3 <RelativePanel> <Rectangle x:Name="Red" Height="100" Width="200" Fill="Red" RelativePanel.Above="Blue"/> <Rectangle x:Name="Blue" Height="100" Width="100" Fill="Blue" RelativePanel.Below="Red"/> </RelativePanel>
  • 35. RelativePanel - Live coding … <RelativePanel HorizontalAlignment="Stretch" Margin="20"> <TextBlock Text="First name" x:Name="FirstNameLabel" Margin="0,5,10,5"/> <TextBox x:Name="FirstNameText" Width="300" /> </RelativePanel> … <Setter Target="FirstNameText.(RelativePanel.RightOf)" Value="FirstNameLabel" /> ... <Setter Target="FirstNameText.(RelativePanel.Below)" Value="FirstNameLabel" /> ...
  • 36. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● UWP, DeviceFamily specific views -> live coding ● Wasze pytania
  • 38. DeviceFamily specific views - Type in file name
  • 39. DeviceFamily specific views - overload public MainPage() { if (AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile") { if (usePrimary) { InitializeComponent(new Uri("ms-appx:///PrimaryMainPage.xaml", UriKind.Absolute)); } else { InitializeComponent(new Uri("ms-appx:///SecondaryMainPage.xaml", UriKind.Absolute)); } } else { InitializeComponent(); } }
  • 40. ● Informacje o środowisku pracy programisty ● WPF - co to właściwie jest? Kontrolki, layout ● Informacje o architekturze MVVM ● Pierwsza aplikacja MVVM -> live coding ● MVVM Light ● Aplikacja uniwersalna - co to jest? ● Aplikacja uniwersalna, Adaptive triggers, RelativePanel -> live coding ● Wasze pytania