WPF Binding

Page 1

WPF: Binding

Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company


Objectives • Learn to use Binding objects to bind data sources and targets • Add data converters to manage conversion during the binding process • Use data templates to modify the layout of bound data in lists

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • • • •

Introducing Binding Working with Type Converters Binding Lists and Data Templates Using Binding and Data Templates

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Introducing Binding • Often need to update one element with information from another • Display information from collection of objects in list, or combo box • Or need to work with data from database • In all these cases • Simplest solution is to bind data from binding source to

target

• In other words—need some way to perform binding

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


When to Use Binding? • Display in the number of characters in a text box, in a TextBlock control • Display the value of Slider control in a TextBlock • Display list of customers in ListBox • Display customer’s photo in Image control • Display and edit customer’s name in TextBox • Of course, there are an infinite number of reasons

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Connecting Sources and Targets • Every time you use binding • Must supply source for data, and target • Normally, target is dependency property of some

user interface element

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Connecting Sources and Targets • Binding source can be any property of any CLR object • Binding object connects source to binding target • Must be dependency property of some

FrameworkElement object

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Under the Hood • When using binding in XAML • Create instance of Binding class, setting various

properties that affect its behavior

• XAML provides binding markup extension • Hides this fact, but still working with Binding object • Completely transparent if you create Binding object in

code

• Can set Mode property of Binding to control direction of data flow (one/two directions?) Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Value Converters • Value Converter block in figure represents instance of class that implements System.Windows.Data.IValueConverter interface • Doing binding declaratively, in XAML, often requires value converter • Select a customer from a ListBox, display combined FirstName

and LastName fields in TextBlock • Select an integer, bind to BorderThickness of Border

• Can’t bind directly—BorderThickness is a Thickness structure

• Infinite reasons to use a value converter • But only if binding declaratively

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


A Few Simple Examples • DEMO

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Binding Details • Standard Binding markup extension includes ElementName and Path attributes: • Text=

"{Binding ElementName=DemoSlider, Path=Value}"

• Path attribute not required: • Text="{Binding Value,

ElementName=DemoSlider }"

• Choose whichever you like Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Binding Details • Path property can refer to property, or property of a property, or indexed property • Need to refer to an attached property? • Grid.Row, for example • Set Path property to (Grid.Row) (in parentheses)

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Binding Details • Binding Markup extension shortcut for child element syntax: <TextBox Width="40" Name="DemoTextBox" Height="23"> <TextBox.Text> <Binding ElementName="DemoSlider" Path="Value" /> </TextBox.Text> </TextBox> Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Setting the Binding Mode • In previous demo, data moves from Slider to TextBox • Changes you make in TextBox have no effect on slider

• Binding is one-way: Data moves in one direction • Set Mode property of Binding to change • Set Mode to: • OneTime • OneWay • TwoWay Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Additional Binding Mode Options (WPF) • Can also set Mode to: • OneWayToSource • Default

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


DEMO • Two-way binding, SimpleBinding3

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


A Simple Example • Enter text into TextBox, update TextBlock with length of the text • Could react to TextChanged event of TextBox • Better: Bind Text property of TextBlock to Text.Length property of TextBox • Points out that binding can use expressions

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


DEMO • SimpleBinding4

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • • • •

Introducing Binding Working with Type Converters Binding Lists and Data Templates Using Binding and Data Templates

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Working with Type Converters • Every example so far moved data from source to target without modifying data • Or relied on built-in type converters

• What happens when source to target requires conversion? • You have color name, want to apply to a property that requires a brush? • How can you convert during the binding process? Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Type Converters to the Rescue • Type converter injects itself into the binding process • Converts data from the source to the target type

• Must implement System.Windows.Data.IValueConverter interface • Two methods: Convert and ConvertBack

• Simple to create converter, in general • Can often use StringFormat property of Binding instead

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using the StringFormat Property • Many conversions consist of formatting a string • Could create a type converter; not necessary • Convert a value into a formatted string? • Can often use StringFormat property

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


DEMO • BindingWithConverter1

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


StringFormat Details • Simplest format: StringFormat=0.0 • Can also specify numeric formatting string, as if calling String.Format method: • StringFormat={}{0:F1} • {} “escapes” formatting string • Include text, don’t need escape • StringFormat=The value is: {0:F1}

• More tricks: • Can bind to multiple elements using MultiBinding • Check it out!

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using a Type Converter • Sometimes, StringFormat can’t do the job • Will need to run code as data transfers • Need a type converter

• Determine source and target data types • Write code to perform the conversion • Perhaps write code to convert back (for two-way binding)

• Sample binds integer from combo box to BorderThickness property • What’s the problem? Thickness structure has four values

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Creating the Type Converter • Attempt to bind SelectedValue of ComboBox to BorderThickness of Border, and fails • Need type (or value) converter

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Converters • Implement IValueConverter interface • Requires Convert and ConvertBack methods • Parameters: • value (System.Object) • targetType (System.Type) • parameter (System.Object) • culture (System.Globalization.Culture)

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Converter Warning • Converter doesn’t trap exceptions • Treated as runtime errors

• You must trap and handle all runtime errors • Return DependencyProperty.UnsetValue on

error

• Not handled in this simple demo • Worth considering!

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


DEMO • IntegerToThicknessConverter

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Referencing the Type Converter • Need way to refer to type converter in XAML • Like any other resource, declare instance in resources; UserControl.Resources in demo • Need namespace reference • xmlns:local="clr-namespace:Binding"

• Then, within UserControl.Resources: • <UserControl.Resources>

<local:IntegerToThicknessConverter x:Key="thicknessConverter" /> </UserControl.Resources>

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using the Type Converter • Add a setting in Binding markup extension <Border BorderThickness="{Binding ElementName=ThicknessComboBox, Path=SelectedValue, Converter={StaticResource thicknessConverter}}" BorderBrush="Black" Margin="5">

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using the Visual Studio Designer • DEMO

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • • • •

Introducing Binding Working with Type Converters Binding Lists and Data Templates Using Binding and Data Templates

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Binding Lists and Data Templates • Common use of binding: Display data in lists • ComboBox/ListBox

• Whether retrieving data from database, or using a collection in memory • Useful to be able to display data

• Imagine scenario: • Want to display list box with numbers • Also display bar with magnitude Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Filling the List/Displaying the Data • DEMO

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Adding a Data Template • Given ListBox displaying numbers • Next task is to modify layout for each item in list

• XML Data Template designed just for this • Allows you to pass one row of data at a time through custom

format, as control renders output

• Data template simply a chunk of XAML markup • Defines how each row should be displayed • Can contain any markup you like • Include at least one Binding markup extension • Otherwise, pretty dull

• Start with static data, then add binding Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Agenda • • • •

Introducing Binding Working with Type Converters Binding Lists and Data Templates Using Binding and Data Templates

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Using Binding and Data Templates • A final scenario that uses binding and data templates • Display list of color names and color “swatches” • Select a color and set background color for border

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Learn More! • This is an excerpt from a larger course. Visit www.learnnowonline.com for the full details! • Learn more about WPF on SlideShare:  Intro to Windows Presentation Foundation (WPF)  WPF: Advanced Controls

Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.