Windows XP
Windows Vista
Windows 7
Windows Azure
Windows Server
Windows Phone
Windows Phone

Data Bindings : Source and Target

3/21/2011 6:20:24 PM
In a typical data binding, a property of one object is updated automatically from a property of another object. The object providing the data—a Slider, for example—is considered to be the source of the data binding; the object receiving the data (such as the TextBlock) is the binding target.

The source of a data binding is usually given a name:

<Slider Name="slider" . . . />

You can break out the target property as a property element and assign to it an object of type Binding:

<TextBlock . . . >
<Binding ElementName="slider" Path="Value" />

Use the ElementName property to indicate the name of the source element; use the Path property for the name of the source property, which is the Value property of the Slider. This type of binding is sometimes known as an element-name binding, because the binding source is a visual element that is referenced by name.

To make the syntax a little friendlier, Silverlight provides a markup extension for Binding where the whole thing is defined within a set of curly braces. Here’s the shorter syntax:

<TextBlock . . . Text="{Binding ElementName=slider, Path=Value}" . . . />

Notice that the ElementName and Path settings are separated by a comma, and that the slider and Value names are no longer in quotation marks. Quotation marks never appear within the curly braces of a markup extension.

The SliderBindings program includes this binding and lets you experiment with some variations. Everything is in the XAML file:

Example 1. Silverlight Project: SliderBindings File: MainPage.xaml (excerpt)
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />

<Slider Name="slider"
Margin="24" />

<TextBlock Name="txtblk"
Text="{Binding ElementName=slider, Path=Value}"
VerticalAlignment="Center" />

<Rectangle Grid.Row="2"
Width="{Binding ElementName=slider, Path=Value}"
RenderTransformOrigin="0.5 0.5"
<RotateTransform x:Name="rotate"
Angle="90" />

The page contains a Slider with a range from 0 to 180, a TextBlock with its Text property bound to the Value property of the Slider, and a Rectangle with its WidthValue property. The Rectangle also has a RotateTransform that rotates the element by a constant 90°. property bound to that same

As you manipulate the Slider, the TextBlock displays the current value and the Rectangle height decreases and increases. (The Binding targets the Width property of the Rectangle but the Rectangle is rotated 90°.)

The order of the properties in the Binding markup extension doesn’t matter. You can put the Path property first:

<TextBlock . . . Text="{Binding Path=Value, ElementName=slider}"

In fact, if Path appears first, you can eliminate the “Path=” part and just use the property name:

<TextBlock . . . Text="{Binding Value, ElementName=slider}"

The Binding class first needs to find an element in the visual tree with the name of slider, and then it needs to use reflection to find the Value property in that element. I prefer the syntax where the order of the properties mimics the internal operation of the process:

<TextBlock . . . Text="{Binding ElementName=slider, Path=Value}"

Why is this property of Binding called Path and not Property? After all, Style has a property named Property. Why not Binding?

The simple answer is that the Path can be a composite of multiple property names. For example, suppose the Slider did not have a name. You can indirectly refer to the Slider by knowing that it is the first item in the Children collection of the element named ContentPanel:

Text="{Binding ElementName=ContentPanel, Path=Children[0].Value}"

Or, going up higher in the visual tree,

Text="{Binding ElementName=LayoutRoot, Path=Children[1].Children[0].Value}"

The components of the path must be properties or indexers connected by periods.

Other -----------------
- Dependency Properties - Attached Properties
- Dependency Properties - Panels with Properties
- Dependency Properties - A New Type of Toggle
- Dependency Properties - Deriving from UserControl
- Dependency Properties - The Dependency Property Difference
- Dependency Properties - The Problem Illustrated
- The App Bar and Controls - TextBox and Keyboard Input
- The App Bar and Controls - Buttons and Styles
- The App Bar and Controls - Toggling a Stopwatch
- The App Bar and Controls - The Button Hierarchy
Trailer game
Video tutorials
- How To Install Windows 8 On VMware Workstation 9

- How To Install Windows 8

- How To Install Windows Server 2012

- How To Disable Windows 8 Metro UI

- How To Change Account Picture In Windows 8

- How To Unlock Administrator Account in Windows 8

- How To Restart, Log Off And Shutdown Windows 8

- How To Login To Skype Using A Microsoft Account

- How To Enable Aero Glass Effect In Windows 8

- How To Disable Windows Update in Windows 8

- How To Disable Windows 8 Metro UI

- How To Add Widgets To Windows 8 Lock Screen
programming4us programming4us
Popular tags
Microsoft Access Microsoft Excel Microsoft OneNote Microsoft PowerPoint Microsoft Project Microsoft Visio Microsoft Word Active Directory Biztalk Exchange Server Microsoft LynC Server Microsoft Dynamic Sharepoint Sql Server Windows Server 2008 Windows Server 2012 Windows 7 Windows 8 windows Phone 7 windows Phone 8
programming4us programming4us
Popular keywords
HOW TO Swimlane in Visio Visio sort key Pen and Touch Creating groups in Windows Server Raid in Windows Server Exchange 2010 maintenance Exchange server mail enabled groups Debugging Tools Collaborating
programming4us programming4us
Trailer game
Windows Vista
Windows 7
Windows Azure
Windows Server
Windows Phone