Wprowadzenie do WPF cz. 2

24
Temat: Seminarium Rzeszowskiej Grupy .NET Prowadzący: Mateusz Pustelak Wprowadzenie do WPF cz. 2

description

 

Transcript of Wprowadzenie do WPF cz. 2

Page 1: Wprowadzenie do WPF cz. 2

Temat:

Seminarium Rzeszowskiej Grupy .NETProwadzący: Mateusz Pustelak

Wprowadzenie do WPF cz. 2

Page 2: Wprowadzenie do WPF cz. 2

Agenda

1. Data Binding – co to takiego?

2. Pośrednia definicja kontrolek – co i jak?

3. Konwersja danych w WPF – IValueConverter.

Page 3: Wprowadzenie do WPF cz. 2

Data Binding

co to takiego?

Page 4: Wprowadzenie do WPF cz. 2

Klasycznie

Klasyczny model definiowania danych:dane = bazaDanych.PobierzDane();

Klasyczny model podpinania danych:JakasKontrolka.Text = dane.JakasWlasciwosc;

Page 5: Wprowadzenie do WPF cz. 2

Data Binding

Obiekt docelowy

Właściwość 1

Właściwość 2

Obiekt źródłowy

Właściwość 1

Właściwość 2data binding

Page 6: Wprowadzenie do WPF cz. 2

Obiekt źródłowy (Binding Source)

• Obiekty dowolnych klasnp. string, int, Person

• Właściwości dowolnych obiektównp. jakasOsoba.Surname

• Kolekcje obiektównp. Person[] tablicaOsob

• Dane XML, LINQ, ADO.NET, itd…• Inne kontrolki WPF

Page 7: Wprowadzenie do WPF cz. 2

Obiekt docelowy (Binding Target)

• Każda właściwość każdej kontrolki WPFnp. Width, Height, Color, Background, Fontnp. TextBox, Label, Button, ListBox

Page 8: Wprowadzenie do WPF cz. 2

Binding Mode

Obiekt docelowy

Właściwość

Obiekt źródłowy

Właściwość

OneWayToSourceTwoWayOneWayOneTime

Page 9: Wprowadzenie do WPF cz. 2

Skąd pobrać dane?

• Ustawienie kontekstu kontrolkinaszaKontrolka.DataContext = naszaWlasciwosc;<Label Name="naszaKontrolka" Content="{Binding}"/>

• Ustawienie kontekstu kontrolki nadrzędnejnaszaKontrolka.DataContext = naszaWlasciwosc;<StackPanel Name="naszaKontrolka">

<Label Content="{Binding}"/></StackPanel>

Page 10: Wprowadzenie do WPF cz. 2

Przykładpublic class Person{

private string _name;public string Name{…}private string _surname;public string Surname

{get { return _surname; }set

{_surname = value; }

public Person(string imie, string nazwisko){…}}

Page 11: Wprowadzenie do WPF cz. 2

PrzykładKod języka XAML:<StackPanel Name="naszaKontrolka"

Orientation="Horizontal"><Label Content="{Binding Path=Name}"/><Label Content="{Binding Path=Surname}"/>

</StackPanel>

Bindowanie danych w kodzie:Person czlowiek = new Person("Mateusz", "Pustelak");naszaKontrolka.DataContext = czlowiek;

Page 12: Wprowadzenie do WPF cz. 2

Automatyczna synchronizacja zmian

Po co?

Page 13: Wprowadzenie do WPF cz. 2

Automatyczna synchronizacja zmianpublic class Person :INotifyPropertyChanged{

public event PropertyChangedEventHandler PropertyChanged;private string _name;public string Name{

get { return _name; }set{

_name = value;PropertyChanged(this, new PropertyChangedEventArgs("Name"));

}}

Page 14: Wprowadzenie do WPF cz. 2

Pośrednia definicja kontrolek

Co i jak?

Page 15: Wprowadzenie do WPF cz. 2

Data Template

Wyświetlanie obiektównp.: listy obiektów danej klasy

W dowolnej kontrolcenp.: ListView, ListBox, ComboBox

Page 16: Wprowadzenie do WPF cz. 2

Przykład

private int _age;public int Age{

get { return _age; }set

{_age = value;PropertyChanged(this, new PropertyChangedEventArgs("Age"));}

}

Page 17: Wprowadzenie do WPF cz. 2

Przykład<ListView Name="listaOsob">

<ListView.View><GridView>

<GridView.Columns><GridViewColumn Header="Wiek" Width="100">

<GridViewColumn.CellTemplate><DataTemplate>

<TextBlock Background="Azure" Text="{Binding Path=Age}"/>

</DataTemplate></GridViewColumn.CellTemplate>

</GridViewColumn>…

</GridView.Columns></GridView>

</ListView.View></ListView>

Page 18: Wprowadzenie do WPF cz. 2

PrzykładObservableCollection<Person> listaLudzi = new

ObservableCollection<Person>();listaLudzi.Add(new Person("Mateusz", "Pustelak",

23));listaLudzi.Add(new Person("Jan", "Kowalski", 75));listaLudzi.Add(new Person("Tomasz", "Szostak", 22));listaLudzi.Add(new Person("Mała", "Mi", 12));listaOsob.ItemsSource = listaLudzi;

Page 19: Wprowadzenie do WPF cz. 2

Konwersja danych w XAML

IValueConverter

Po co ?

Page 20: Wprowadzenie do WPF cz. 2

IValueConverter

Czasami mamy dane w jednej postacinp.: string, int, bool

A chcemy je wyświetlić w innej

Page 21: Wprowadzenie do WPF cz. 2

Przykład - IValueConverter[ValueConversion(typeof(int),typeof(string))]class AgeConverter : IValueConverter{

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

{if (value is int){

int wiek = (int)value;if (wiek < 18) return "Młody";else if (wiek >= 18 && wiek < 65) return "Średni";else if (wiek >= 65) return "Starszy";

}return null;

}public object ConvertBack(…){…}

}

Page 22: Wprowadzenie do WPF cz. 2

Przykład - IValueConverterxmlns:local="clr-namespace:Test"

<Window.Resources><local:AgeConverter x:Key="KonwerterWieku"></local:AgeConverter>

</Window.Resources>

<GridViewColumn Header="Grupa wiekowa" DisplayMemberBinding="{Binding Path=Age, Converter={StaticResource KonwerterWieku}, Mode=OneWay}">

Page 23: Wprowadzenie do WPF cz. 2

PYTANIA ?

Page 24: Wprowadzenie do WPF cz. 2

Materiały i projekty zawarte w prezentacji zostaną udostępnione na stronie kod.prz.edu.pl

Kontakt:Mateusz Pustelak,email: [email protected]: www.mpustelak.plgg: 4693252