WINDOWS PRESENTATION FOUNDATION LEKTION 3

Similar documents
آموزش DataGrid در WPF به همراه صفحه بندي و جستجوي انتخابی. کلیک کن

AGENDA WINDOWS PRESENTATION FOUNDATION LEKTION 4. Statusbar Hyperlänkar WebBrowser TabControl Ribbon ListBox Data Template Resource Dictionary Style

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Windows 10 Apps Development

Election 2012: Real- Time Monitoring of Election Results

Projektet Computer: Specifikation. Objektorienterad modellering och diskreta strukturer / design. Projektet Computer: Data. Projektet Computer: Test

Microsoft Virtual Labs. Building Windows Presentation Foundation Applications - C# - Part 1

Windows Presentation Foundation Tutorial 1

Relationships in WPF Applications

Implementing multi-user multi-touch scenarios using WPF in Windows* 8 Desktop Apps

Chapter 14 WCF Client WPF Implementation. Screen Layout

Interface Programmera mot interface Johan Eliasson Johan Eliasson Interface kan bryta beroendekedjor Skriv generell kod «Type» Class2 Interface

Diagnostisera problem med utskriftskvaliteten

This tutorial has been designed for all those readers who want to learn WPF and to apply it instantaneously in different type of applications.

An Introduction to the Windows Presentation Foundation with the Model-View-ViewModel

Windows Presentation Foundation (WPF) User Interfaces

Category work in courtroom talk about domestic violence: Gender as an interactional accomplishment in child custody disputes

Windows Presentation Foundation (WPF)

Microsoft SQL Server 2012: Designing Buisness Intelligence Solutions

DRb Distributed Ruby. Johan Sørensen

Utbytesbatterier för UPS:er 300VA VA

THE USE OF WPF FOR DEVELOPMENT OF INTERACTIVE GEOMETRY SOFTWARE

Sweden National H.O.G. Rally July 2010

Car Customer Service. SFK Väst, January 2016, Måns Falk, mfalk, Security Class; Proprietary

Introduction to C#, Visual Studio and Windows Presentation Foundation

Configuring and Administering Hyper-V in Windows Server 2012

INTERNATIONELLA BANKÖVERFÖRINGAR

Design Suggestions for Danske Bank SE

STEP BY STEP to Build the Application 1. Start a. Open a MvvmLight (WPF4) application and name it MvvmControlChange.

Performance and Usability Improvements for Massive Data Grids using Silverlight

Introduction to the BackgroundWorker Component in WPF

Critical section problem (repetition)

Einführung in die Windows Store App Entwicklung mit C# und XAML. Modul 2 Datenbindung und Zugriff auf das lokale Dateisystem

Temporary parental benefit for care of children [Tillfällig föräldrapenning vid vård av barn]

Windows Presentation Foundation Using C#

Web-based address book

TRA Q NORDIC RELEASE - JULY 2013

Investigating the Possibility of an Active/Active Highly Available Jenkins

SAS Education Providing knowledge through global training and certification. SAS Foundation. Kursöversikt 2010

Understanding In and Out of XAML in WPF

Mekaniska klämventiler typ OV Mechanical Pinch Valves type OV

Vi har dessutom 1000-tals andra viner på Winefinder.se

Introduktion till SAS 9 Plattformen Helikopterkursen

Housing allowance for families with children [Bostadsbidrag till barnfamiljer]

Scrum Kandidatprojekt datateknik - TDDD83

Schematic representation of the geographical railway network used by the Swedish Transport Administration

Application for Schengen Visa

Viktigaste uppgift: Web Browser SSO

Microsoft + SOA = Sant? Joakim Linghall Principal System Engineer SOA and Business Process joakiml@microsoft.com

Top 50 WPF Interview Questions

BankID Relying Party Guidelines

Child allowance [Barnbidrag] and large family supplement [flerbarnstillägg] [Barnbidrag och flerbarnstillägg]

Network investigation using SNMP

ASP.NET Dynamic Data

WPF Viewer for Reporting Services 2008/2012 Getting Started

1. WPF Tutorial Page 1 of 431 wpf-tutorial.com

IFS HR: KOMPETENS OCH PERSONALUTVECKLING IFS Användarkonferens

Hands-On Lab. Building a Data-Driven Master/Detail Business Form using Visual Studio Lab version: Last updated: 12/10/2010.

Lab 2 review PHP intro. MVC (Model View controller)

Maskinöversättning F2 Översättningssvårigheter + Översättningsstrategier

TDDB84 Design Patterns Exam

Ackrediteringens omfattning / Scope of Accreditation ALS Scandinavia AB, Täby. Kemiska analyser/chemical analysis. Bilaga/ Appendix 2

openbim FM solutions and projects in Sweden Oslo, 11 September 2014 Client BIM requirements BIM in the State

Office of the Secretary of

Google Web Toolkit. Peter Norrhall

Tanden Care Provider Interfaces Reverse Claim v1

Microsoft Windows Apps Dev w/microsoft.net Framework 4.

Comparison of the EU s Sustainable urban mobility plan (SUMP) and the Swedish planning support Transport for an attractive city (TRAST)

SAS Data Integration SAS Business Intelligence

Elektronikavfall. Thomas Lindhqvist IIIEE Lund University. 18 February 2009

Tanden Care Provider Interfaces Submit Claim v3

PRTK. Password Recovery ToolKit EFS (Encrypting File System)

Large-scale industrial software development

International Council on Systems Engineering. ISO/IEC/IEEE SEminar Linköping 16 november 2015

CROSS-PLATFORM MOBILE APPLICATION DEVELOPMENT WITH XAMARIN.FORMS

CONTINENT VENETIAN BLIND SYSTEM 25/35/50 MM COMPONENT BOOK

Conexión SQL Server C#

Mapping to the Windows Presentation Framework

How to set up & configure GADD Dashboard Server 1.4

Experiences of Process Management

Git as introduction to configuration management for students

How To Work For A Car Maker

Questionnaire for visa applicants Appendix A

Transcription:

WINDOWS PRESENTATION FOUNDATION LEKTION 3 Mahmud Al Hakim mahmud@alhakim.se www.alhakim.se COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 1

AGENDA Introduktion till Databindning (Data Binding) Element Binding Data Context Stringformat Object Binding Gränssnittet INotifyPropertyChanged (INPC) ObservableCollection COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 2

DATA BINDING Windows Presentation Foundation (WPF) data binding provides a simple and consistent way for applications to present and interact with data. Elements can be bound to data from a variety of data sources in the form of common language runtime (CLR) objects and XML. ContentControls such as Button and ItemsControls such as ListBox and ListView have built-in functionality to enable flexible styling of single data items or collections of data items. Sort, filter, and group views can be generated on top of the data. Källa https://msdn.microsoft.com/library/ms752347%28v=vs.100%29.aspx COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 3

VAD ÄR DATA BINDING Data binding is the process that establishes a connection between the application UI and business logic. If the binding has the correct settings and the data provides the proper notifications, then, when the data changes its value, the elements that are bound to the data reflect changes automatically. Data binding can also mean that if an outer representation of the data in an element changes, then the underlying data can be automatically updated to reflect the change. For example, if the user edits the value in a TextBox element, the underlying data value is automatically updated to reflect that change. Källa https://msdn.microsoft.com/enus/library/ms752347%28v=vs.100%29.aspx#what_is_data_binding COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 4

DATA BINDING MODEL Bildkälla: https://msdn.microsoft.com/library/ms752347%28v=vs.100%29.aspx#basic_data_binding_concepts COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 5

ELEMENT BINDING <StackPanel Margin="10"> <TextBox Name="data" /> <TextBlock Text="{Binding Path=Text, ElementName=data}" /> </StackPanel> Tips Att skriva ett värde med klamrar kallas {Markup Extension} COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 6

KLASSEN BINDING COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 7

EGENSKAPEN PATH Tips! Path= kan utelämnas om källan är den första egenskapen som skrivs direkt efter Binding COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 8

EGENSKAPEN ELEMENTNAME COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 9

ELEMENT BINDING EXEMPEL 2 <StackPanel> <Slider Name="mySlider" Minimum="0" Maximum="100" Width="300" /> <TextBlock Width="300" Text="{Binding Value, ElementName=mySlider}" /> </StackPanel> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 10

ELEMENT BINDING EXEMPEL 3 <StackPanel Orientation="Horizontal" Height="25"> <Label Target="{Binding ElementName=namn}"> _Namn: </Label> <TextBox x:name="namn" Width="200"/> <Label Target="{Binding ElementName=epost}"> _Epost: </Label> <TextBox x:name="epost" Width="200"/> </StackPanel> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 11

EGENSKAPEN DATACONTEXT public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = this; } } Gets or sets the data context for an element when it participates in data binding. Returns: The object to use as data context. COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 12

ÖVNING <StackPanel Margin="15"> <WrapPanel> <TextBlock Text="Ändra Title: " /> <TextBox Text="{Binding Title}" Width="150" /> </WrapPanel> <WrapPanel Margin="0,10,0,0"> <TextBlock Text="Bredd: " /> <TextBox Text="{Binding Width}" Width="50" /> <TextBlock Text=" Höjd " /> <TextBox Text="{Binding Height}" Width="50" /> </WrapPanel> </StackPanel> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 13

EGENSKAPEN UPDATESOURCETRIGGER <WrapPanel> <TextBlock Text="Ändra Title: " /> <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" /> </WrapPanel> Gets or sets a value that determines the timing of binding source updates. COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 14

ÖVNING SKAPA EN KALENDER BINDA TVÅ TEXTFÄLT TILL DISPLAYDATE OCH SELECTEDDATE COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 15

FACIT <Grid> <Grid.RowDefinitions> <RowDefinition Height="30" /> <RowDefinition Height="30" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="200" /> </Grid.ColumnDefinitions> </Grid> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 16

FACIT FORTS <Calendar x:name="thecalendar" Width="180" Height="170" Margin="10,0,0,0" VerticalAlignment="Top" Grid.RowSpan="3" /> <Label Content="DisplayDate:" Grid.Column="1" Grid.Row="0" /> <TextBox x:name="displaydatetextbox" Text="{Binding DisplayDate, ElementName=theCalendar, UpdateSourceTrigger=PropertyChanged}" Margin="8,2" Grid.Column="2" Grid.Row="0" /> <Label Content="SelectedDate:" Grid.Column="1" Grid.Row="1" /> <TextBox x:name="selecteddatetextbox" Text="{Binding SelectedDate, ElementName=theCalendar, UpdateSourceTrigger=PropertyChanged}" Margin="8,2" Grid.Column="2" Grid.Row="1" /> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 17

STRINGFORMAT <TextBox x:name="displaydatetextbox" Text="{Binding DisplayDate, ElementName=theCalendar, UpdateSourceTrigger=PropertyChanged, StringFormat=\{0:yyyy-MM-dd\} }" Margin="8,2" Grid.Column="2" Grid.Row="0" /> Tips! DateTime XAML Syntax https://msdn.microsoft.com/library/dd631811(v=vs.100).aspx#format_strings_for_dateti me_xaml_syntax COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 18

STRINGFORMAT EXEMPEL 2 OBS! Vi behöver lägga till namnrymden System xmlns:system="clr-namespace:system;assembly=mscorlib" <StackPanel Margin="10"> <TextBlock Text="{Binding Source={x:Static system:datetime.now}, StringFormat=Datum: {0:yyyy-MM-dd}}" /> <TextBlock Text="{Binding Source={x:Static system:datetime.now}, StringFormat=Tid: {0:HH:mm}}" /> </StackPanel> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 19

OBJECT BINDING Source Target Ett objekt av typen Employee DataContext = Employee.GetEmployee(); <TextBlock Text="{Binding Name}" /> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 20

SOURCE KLASSEN EMPLOYEE public class Employee { public string Name { get; set; } public string Email { get; set; } public static Employee GetEmployee() { var emp = new Employee() { Name = "Mahmud Al Hakim", Email = "mahmud@alhakim.se" }; return emp; } } COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 21

TARGET UI <StackPanel Name="Display" Margin="10"> <StackPanel Orientation="Horizontal"> <TextBlock Text="Namn: " /> <TextBlock Margin="5,0,0,0" Text="{Binding Name}" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Epost: " /> <TextBlock Margin="5,0,0,0" Text="{Binding Email}" /> </StackPanel> </StackPanel> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 22

DATACONTEXT I CODE BEHIND public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = Employee.GetEmployee(); } } COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 23

INPC Gränssnittet uppdates inte automatiskt vid förändringar i bakomliggande objekt! Detta är bra för Att få bättre prestanda på applikationen. Att manuellt kunna notifiera flera kontroller som är beroende av en aktuell uppdatering. Hur uppdaterar vi gränssnittet då? 1. Implementera gränssnittet INotifyPropertyChanged (INPC). 2. Initiera händelsen PropertyChangedEventHandler COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 24

EN KLASS SOM IMPLEMENTERAR INPC using System.ComponentModel; public class BindableBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string propertyname) { if (PropertyChanged!= null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } } COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 25

PERSON ÄRVER FRÅN BINDABLEBASE public class Person : BindableBase { //public string Name { get; set; } private string _name; public string Name { get { return _name; } set { _name = value; NotifyPropertyChanged("Name"); } } } OBS! Auto-egenskaper funkar inte. Vi behöver notifiera PropertyChanged COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 26

ENKELT UI FÖR ATT TESTA <StackPanel> <TextBlock HorizontalAlignment="Center" FontSize="30" Text="{Binding Name}" /> <Button Content="Ändra" Width="100" Click="Button_Click"/> </StackPanel> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 27

CODE BEHIND public partial class MainWindow : Window { Person p = new Person(); public MainWindow() { InitializeComponent(); p = new Person() { Name = "Mahmud" }; DataContext = p; } Testa att ta bort NotifyPropertyChanged("Name"); från klassen Person Vad händer? private void Button_Click(object sender, RoutedEventArgs e){ } p.name = "Kalle"; } COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 28

OBSERVABLECOLLECTION Klassen ObservableCollection är en lista som implementerar gränssnittet INotifyPropertyChanged. ObservableCollection representerar en dynamisk samling med automatiska notifieringar när element läggs till, tas bort eller uppdateras! Finns i namnrymden System.Collections.ObjectModel COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 29

OBSERVABLECOLLECTION - EXEMPEL public partial class MainWindow : Window { private ObservableCollection<Person> personer; public MainWindow() { InitializeComponent(); personer = new ObservableCollection<Person>() { new Person(){Name="Mahmud Al Hakim"} }; DataContext = personer; } private void btn_click(object sender, RoutedEventArgs e){ personer.add(new Person() { Name = txtname.text }); txtname.text = string.empty; } } COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 30

OBSERVABLECOLLECTION - UI <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <StackPanel Margin="5"> <TextBlock x:name="lblname" Text="Namn:"></TextBlock> <TextBox x:name="txtname"></textbox> <Button Width="100" Height="20" Margin="5" Click="btn_Click" Content="Lägg till"></button> </StackPanel> <ListView Margin="5" Grid.Column="1" ItemsSource="{Binding}"> <ListView.View> <GridView><GridViewColumn Header="Lista över personer..." DisplayMemberBinding="{Binding Name}"/> </GridView> </ListView.View> </ListView> </Grid> COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 31

ÖVNING Utveckla föregående exempel. Skapa ett E-post-fält. Lägg till en kolumn som visar epost. Lägg till en knapp för borttagning av en markerad person. COPYRIGHT 2015 MAHMUD AL HAKIM WWW.WEBACADEMY.SE 32