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
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
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
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