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
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
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!
Satisfy Your Technical CuriositySatisfy Your Technical Curiosity
What is Data BindingWhat is Data Binding4
Control
Property
Object
Property
One WayTwo Way
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
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
Satisfy Your Technical Curiosity
Building a ConverterBuilding a Converter
Implement the IValueConverter interfaceImplement the IValueConverter interface
7
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
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
Satisfy Your Technical Curiosity
Exception ValidationException Validation
Data Source can throw ExceptionData Source can throw Exception
ExceptionValidationRule catches thisExceptionValidationRule catches this
10
Satisfy Your Technical Curiosity
Custom Validation RulesCustom Validation Rules
Derive from ValidationRuleDerive from ValidationRule
11
Satisfy Your Technical Curiosity
Using the ValidationRuleUsing the ValidationRule
Add it to the <ValidationRules> elementAdd it to the <ValidationRules> element
12
Satisfy Your Technical Curiosity
Custom Error FeedbackCustom Error Feedback
Define a ControlTemplate resourceDefine a ControlTemplate resource
13
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
Satisfy Your Technical Curiosity
Using StylesUsing Styles
Even better, use a style for all textboxesEven better, use a style for all textboxes
15
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
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
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
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
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
Satisfy Your Technical Curiosity
Selecting the DataTemplateSelecting the DataTemplate
By NameBy Name
By TypeBy Type
21
Type selectsDataTemplate
Satisfy Your Technical Curiosity
Dynamically Selecting a TemplateDynamically Selecting a Template
Use a DataTemplateSelectorUse a DataTemplateSelector
22
Satisfy Your Technical Curiosity
PersonDataTemplateSelectorPersonDataTemplateSelector23
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
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
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
Satisfy Your Technical Curiosity
Master Detail Master Detail 27
Satisfy Your Technical Curiosity
DisplayMemberPathDisplayMemberPath
Replaces single-field templateReplaces single-field template
28
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
Satisfy Your Technical Curiosity
Sorting and GroupingSorting and Grouping
Again use a CollectionViewAgain use a CollectionView
30
Satisfy Your Technical Curiosity
Sorting and GroupingSorting and Grouping
Use a CollectionViewSourceUse a CollectionViewSource
Define a GroupStyleDefine a GroupStyle
31
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}}"/>
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;
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
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……
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
Satisfy Your Technical Curiosity