Top Banner
Satisfy Your Technical Curiosity WPF Data Binding WPF Data Binding Explained Explained Peter Himschoot Peter Himschoot Trainer @ U2U Trainer @ U2U Microsoft Regional Director Microsoft Regional Director Belux Belux www.u2u.info/Blogs/Peter www.u2u.info/Blogs/Peter
37
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dev308

Satisfy Your Technical Curiosity

WPF Data BindingWPF Data BindingExplainedExplainedPeter HimschootPeter HimschootTrainer @ U2UTrainer @ U2U

Microsoft Regional Director BeluxMicrosoft Regional Director Beluxwww.u2u.info/Blogs/Peterwww.u2u.info/Blogs/Peter

Page 2: Dev308

Satisfy Your Technical CuriositySatisfy Your Technical Curiosity

Data BindingData Binding

The need for data bindingThe need for data bindingUsing simple data bindingUsing simple data bindingConverting and validating dataConverting and validating dataUsing complex data bindingUsing complex data bindingCustomizing data binding with templatesCustomizing data binding with templatesMaster-detail data bindingMaster-detail data bindingFiltering, sorting and grouping dataFiltering, sorting and grouping dataXml, LINQ, ADO.NET data bindingXml, LINQ, ADO.NET data bindingDebugging Data BindingDebugging Data Binding

2

Page 3: Dev308

Satisfy Your Technical CuriositySatisfy Your Technical Curiosity

The need for Data BindingThe need for Data Binding

Imagine showing data retrieved from DBImagine showing data retrieved from DBMove data from a column to a controlMove data from a column to a controlAllow user to edit the dataAllow user to edit the dataValidate the dataValidate the dataThen move data from control to columnThen move data from control to columnUpdate the columnUpdate the column

Data Binding automates this!Data Binding automates this!

Page 4: Dev308

Satisfy Your Technical CuriositySatisfy Your Technical Curiosity

What is Data BindingWhat is Data Binding4

Control

Property

Object

Property

One WayTwo Way

Page 5: Dev308

Satisfy Your Technical CuriositySatisfy Your Technical Curiosity

Simple Data BindingSimple Data Binding

Bind one control’s property to one object’s dataBind one control’s property to one object’s dataControl to controlControl to control

Control to (data) objectControl to (data) object

5

Page 6: Dev308

Satisfy Your Technical Curiosity

Data ConversionData Conversion

Bind to another type by converting itBind to another type by converting itAdd Converter class as a resource:Add Converter class as a resource:

Use ConverterUse Converter

6

Page 7: Dev308

Satisfy Your Technical Curiosity

Building a ConverterBuilding a Converter

Implement the IValueConverter interfaceImplement the IValueConverter interface

7

Page 8: Dev308

Satisfy Your Technical Curiosity

UpdateSourceTriggerUpdateSourceTrigger

TextBox doesn’t change value immediatelyTextBox doesn’t change value immediatelyTo do so, set UpdateSourceTriggerTo do so, set UpdateSourceTrigger

UpdateSourceTrigger values:UpdateSourceTrigger values:DefaultDefaultLostFocus (= Default for TextBox)LostFocus (= Default for TextBox)PropertyChangedPropertyChangedExplicitExplicit

8

Page 9: Dev308

Satisfy Your Technical Curiosity

Data ValidationData Validation

Users will always make mistakesUsers will always make mistakesValidation helps users determine theseValidation helps users determine theseDefault DataBinding doesn’t support thisDefault DataBinding doesn’t support this

You need more verbose “Binding”You need more verbose “Binding”

9

Page 10: Dev308

Satisfy Your Technical Curiosity

Exception ValidationException Validation

Data Source can throw ExceptionData Source can throw Exception

ExceptionValidationRule catches thisExceptionValidationRule catches this

10

Page 11: Dev308

Satisfy Your Technical Curiosity

Custom Validation RulesCustom Validation Rules

Derive from ValidationRuleDerive from ValidationRule

11

Page 12: Dev308

Satisfy Your Technical Curiosity

Using the ValidationRuleUsing the ValidationRule

Add it to the <ValidationRules> elementAdd it to the <ValidationRules> element

12

Page 13: Dev308

Satisfy Your Technical Curiosity

Custom Error FeedbackCustom Error Feedback

Define a ControlTemplate resourceDefine a ControlTemplate resource

13

Page 14: Dev308

Satisfy Your Technical Curiosity

Using the ControlTemplateUsing the ControlTemplate

Set Validation.ErrorTemplate attached propSet Validation.ErrorTemplate attached prop

Validation will use this for feedbackValidation will use this for feedback

14

Page 15: Dev308

Satisfy Your Technical Curiosity

Using StylesUsing Styles

Even better, use a style for all textboxesEven better, use a style for all textboxes

15

Page 16: Dev308

Satisfy Your Technical Curiosity

Using TooltipsUsing Tooltips

User cannot see what is wrongUser cannot see what is wrongUse a tooltip to show the actual errorUse a tooltip to show the actual error

16

Page 17: Dev308

Satisfy Your Technical Curiosity

Data Binding Multiple PropertiesData Binding Multiple Properties

Avoid repeating the same sourceAvoid repeating the same source

Use DataContext!Use DataContext!

17

Page 18: Dev308

Satisfy Your Technical Curiosity

Provide Data from CodeProvide Data from Code

May be easier to load data in codebehindMay be easier to load data in codebehindCan set DataContext in codeCan set DataContext in code

18

Page 19: Dev308

Satisfy Your Technical Curiosity

Using Complex Data BindingUsing Complex Data Binding

Bind a control’s items to list of objectsBind a control’s items to list of objects

Objects are displayed using ToString()Objects are displayed using ToString()

19

Page 20: Dev308

Satisfy Your Technical Curiosity

Using Data TemplatesUsing Data TemplatesDisplay object with a DataTemplateDisplay object with a DataTemplate

Set control’s ItemTemplateSet control’s ItemTemplate

DataTemplate DataSource = objectDataTemplate DataSource = object

20

Page 21: Dev308

Satisfy Your Technical Curiosity

Selecting the DataTemplateSelecting the DataTemplate

By NameBy Name

By TypeBy Type

21

Type selectsDataTemplate

Page 22: Dev308

Satisfy Your Technical Curiosity

Dynamically Selecting a TemplateDynamically Selecting a Template

Use a DataTemplateSelectorUse a DataTemplateSelector

22

Page 23: Dev308

Satisfy Your Technical Curiosity

PersonDataTemplateSelectorPersonDataTemplateSelector23

Page 24: Dev308

Satisfy Your Technical Curiosity

Binding with DataProvidersBinding with DataProviders

Use DataProvider in XAMLUse DataProvider in XAML

Then set ItemsSource in XAMLThen set ItemsSource in XAML

24

Your class orService Proxy

(Optional)Method to call

Page 25: Dev308

Satisfy Your Technical Curiosity

Asynchronous Data BindingAsynchronous Data Binding

Data Provider allows async bindingData Provider allows async bindingCall method in backgroundCall method in background

25

Page 26: Dev308

Satisfy Your Technical Curiosity

Master Detail BindingMaster Detail Binding

Use ItemsControl (e.g. ListBox) as masterUse ItemsControl (e.g. ListBox) as masterSet IsSynchronizedWithCurrentItem="True"Set IsSynchronizedWithCurrentItem="True"

Other bindings on same source will follow Other bindings on same source will follow mastermaster

26

Page 27: Dev308

Satisfy Your Technical Curiosity

Master Detail Master Detail 27

Page 28: Dev308

Satisfy Your Technical Curiosity

DisplayMemberPathDisplayMemberPath

Replaces single-field templateReplaces single-field template

28

Page 29: Dev308

Satisfy Your Technical Curiosity

Filtering with ViewsFiltering with Views

Use a CollectionViewUse a CollectionViewCollectionViewSource in XAMLCollectionViewSource in XAML

Implement the Filter eventImplement the Filter event

29

Page 30: Dev308

Satisfy Your Technical Curiosity

Sorting and GroupingSorting and Grouping

Again use a CollectionViewAgain use a CollectionView

30

Page 31: Dev308

Satisfy Your Technical Curiosity

Sorting and GroupingSorting and Grouping

Use a CollectionViewSourceUse a CollectionViewSource

Define a GroupStyleDefine a GroupStyle

31

Page 32: Dev308

Satisfy Your Technical Curiosity

Binding to XMLBinding to XML

32

<Cars> <Car Make="Ford" Model="F-150"> <Image>truck.png</Image> </Car> <Car> ... </Car></Cars>

cars.xml

<XmlDataProvider x:Key="cars" XPath="/Cars/Car" Source="cars.xml" />

<TextBlock TextContent="{Binding XPath=@Make, Source={StaticResource cars}}"/>

Page 33: Dev308

Satisfy Your Technical Curiosity

Provide XML from CodeProvide XML from Code

Can load XML data in codebehindCan load XML data in codebehindJust like any other dataJust like any other data

33

XmlDocument doc = new XmlDocument();doc.LoadXml("<Foo><Bar>Hello, world</Bar></Foo>");

myGrid.DataContext = doc;

Page 34: Dev308

Satisfy Your Technical Curiosity

Binding To DataSetsBinding To DataSets

Fill the DataSet as usualFill the DataSet as usualThen use it as the DataContextThen use it as the DataContext

Controls use Path to referenceControls use Path to referenceTablesTables

ColumnsColumns

34

Page 35: Dev308

Satisfy Your Technical Curiosity

Dude, where’s the DataGrid?Dude, where’s the DataGrid?

DataGrid like controls not providedDataGrid like controls not providedProvided 3d party controlsProvided 3d party controls

InfragisticsInfragisticsXceedXceed……

Page 36: Dev308

Satisfy Your Technical Curiosity

Debugging Data BindingDebugging Data Binding

Binding failures generate debug messagesBinding failures generate debug messages

Check the Output window in Visual Studio®Check the Output window in Visual Studio®

36

Page 37: Dev308

Satisfy Your Technical Curiosity