In the previous article how does C# code behind interact with an XAML interface within a Silverlight 2 context? - Binding process: Part II, I gave an example of how to use the code behind objects within XAML context. Now, I will do the inverse, I mean, we deal from within the C# code behind.
We still continue with the object Person which has been introduced in the previous article and that was defined as follow:
public class Person
{
public Person()
{ }
public Person(string FirstName, string LastName, string PseudoName)
{
this.FirstName = FirstName;
this.LastName = LastName;
this.PseudoName = PseudoName;
}
public string FirstName
{
get; set;
}
public string LastName
{
get; set;
}
public string PseudoName
{
get; set;
}
}
We should remember that a parameter less constructor has to be defined and the object has to be declared as public, otherwise, runtime error will be raised.
First thing that it should be done is to add the System.Windows.Data namespace. Then we define three Binding objects, one for the first name, one for the last name and one for the pseudo name.
Binding FirstNameBind;
Binding LastNameBind;
Binding PseudoNameBind;
A person object should also be declared
Person oPerson;
Then the person object should be instantiated
//The person is defined in the C# side this once
oPerson = new Person("Bejaoui","Bechir","Yougethen");
Now, each binding object should be tied to its corresponding person property as follow:
FirstNameBind = new Binding("FirstName");
LastNameBind = new Binding("LastName");
PseudoNameBind = new Binding("PseudoName");
Then the source of each binding object must be set. I this case, oPerson is the source
FirstNameBind.Source = oPerson;
LastNameBind.Source = oPerson;
PseudoNameBind.Source = oPerson;
Now, to tie the binding objects to the TextBlocks, we should define them first at the XAML editor level, there is which I suppose as an elegant way to do that:
First, we define the XAML and we give our container a name <Grid x:Name="LayoutRoot"..,
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="Silverlight.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:code="clr-namespace:Silverlight" Width="300" Height="300">
<Grid x:Name="LayoutRoot" Background="Azure" >
<Grid.Resources>
<code:Person x:Name="me"/>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.Row="0">
First name
</TextBlock>
<TextBlock Grid.Column="1"
Grid.Row="0">
Last name
</TextBlock>
<TextBlock Grid.Column="2"
Grid.Row="0">
Pseudo name
</TextBlock>
<TextBlock x:Name="txtFirstName"
Grid.Column="0"
Grid.Row="1" />
<TextBlock x:Name="txtLastName"
Grid.Column="1"
Grid.Row="1" />
<TextBlock x:Name="txtPseudoName"
Grid.Column="2"
Grid.Row="1" />
</Grid>
</UserControl>
And then it will be easy to get all the children controls in a collection as follow:
UIElementCollection TextBlocks = LayoutRoot.Children;
In this case, the TextBlocks will be defined as bellow:

Join the conversation! Your thoughts help the community grow.