Wprowadzenie do WPF cz. 2
-
Upload
mofyl -
Category
Technology
-
view
1.847 -
download
6
description
Transcript of Wprowadzenie do WPF cz. 2
Temat:
Seminarium Rzeszowskiej Grupy .NETProwadzący: Mateusz Pustelak
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.
Data Binding
co to takiego?
Klasycznie
Klasyczny model definiowania danych:dane = bazaDanych.PobierzDane();
Klasyczny model podpinania danych:JakasKontrolka.Text = dane.JakasWlasciwosc;
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
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
Obiekt docelowy (Binding Target)
• Każda właściwość każdej kontrolki WPFnp. Width, Height, Color, Background, Fontnp. TextBox, Label, Button, ListBox
Binding Mode
Obiekt docelowy
Właściwość
Obiekt źródłowy
Właściwość
OneWayToSourceTwoWayOneWayOneTime
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>
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){…}}
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;
Automatyczna synchronizacja zmian
Po co?
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"));
}}
Pośrednia definicja kontrolek
Co i jak?
Data Template
Wyświetlanie obiektównp.: listy obiektów danej klasy
W dowolnej kontrolcenp.: ListView, ListBox, ComboBox
Przykład
private int _age;public int Age{
get { return _age; }set
{_age = value;PropertyChanged(this, new PropertyChangedEventArgs("Age"));}
}
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>
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;
Konwersja danych w XAML
IValueConverter
Po co ?
IValueConverter
Czasami mamy dane w jednej postacinp.: string, int, bool
A chcemy je wyświetlić w innej
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(…){…}
}
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}">
PYTANIA ?
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