Dev308
-
Upload
guest2130e -
Category
Technology
-
view
474 -
download
0
Transcript of Dev308
![Page 1: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/1.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/2.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/3.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/4.jpg)
Satisfy Your Technical CuriositySatisfy Your Technical Curiosity
What is Data BindingWhat is Data Binding4
Control
Property
Object
Property
One WayTwo Way
![Page 5: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/5.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/6.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/7.jpg)
Satisfy Your Technical Curiosity
Building a ConverterBuilding a Converter
Implement the IValueConverter interfaceImplement the IValueConverter interface
7
![Page 8: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/8.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/10.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/11.jpg)
Satisfy Your Technical Curiosity
Custom Validation RulesCustom Validation Rules
Derive from ValidationRuleDerive from ValidationRule
11
![Page 12: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/12.jpg)
Satisfy Your Technical Curiosity
Using the ValidationRuleUsing the ValidationRule
Add it to the <ValidationRules> elementAdd it to the <ValidationRules> element
12
![Page 13: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/13.jpg)
Satisfy Your Technical Curiosity
Custom Error FeedbackCustom Error Feedback
Define a ControlTemplate resourceDefine a ControlTemplate resource
13
![Page 14: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/14.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/15.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/16.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/17.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/20.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/21.jpg)
Satisfy Your Technical Curiosity
Selecting the DataTemplateSelecting the DataTemplate
By NameBy Name
By TypeBy Type
21
Type selectsDataTemplate
![Page 22: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/22.jpg)
Satisfy Your Technical Curiosity
Dynamically Selecting a TemplateDynamically Selecting a Template
Use a DataTemplateSelectorUse a DataTemplateSelector
22
![Page 23: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/23.jpg)
Satisfy Your Technical Curiosity
PersonDataTemplateSelectorPersonDataTemplateSelector23
![Page 24: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/24.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/25.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/26.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/27.jpg)
Satisfy Your Technical Curiosity
Master Detail Master Detail 27
![Page 28: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/28.jpg)
Satisfy Your Technical Curiosity
DisplayMemberPathDisplayMemberPath
Replaces single-field templateReplaces single-field template
28
![Page 29: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/29.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/30.jpg)
Satisfy Your Technical Curiosity
Sorting and GroupingSorting and Grouping
Again use a CollectionViewAgain use a CollectionView
30
![Page 31: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/31.jpg)
Satisfy Your Technical Curiosity
Sorting and GroupingSorting and Grouping
Use a CollectionViewSourceUse a CollectionViewSource
Define a GroupStyleDefine a GroupStyle
31
![Page 32: Dev308](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/32.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/33.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/34.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/35.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/36.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081404/5584c6a1d8b42af1138b4884/html5/thumbnails/37.jpg)
Satisfy Your Technical Curiosity