Skip to main content

WPF Tutorial - Binding without XAML

The introduction of binding and XAML has made creating user interfaces in .NET a much more enjoyable experience compared to previous incarnations. Binding is such an integral part of the WPF experience that most developers thoroughly understand how to do it in XAML, however what we're going to look at today is how to create a binding using only C# code.
I'm going to build a very basic example application - it has a TextBlock and a TextBox. Whatever is typed into the TextBox, will be reflected in the TextBlock. Here's a screenshot of what I'm talking about:
Example App Screenshot
This application lends itself perfectly to XAML binding, and in fact that's the first way I implemented it.
<Window x:Class="BindingWithoutXAML.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <Grid Margin="10">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*" />
      <ColumnDefinition Width="10" />
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <TextBox x:Name="textBox"
            VerticalAlignment="Center" />

    <TextBlock x:Name="textBlock"
              VerticalAlignment="Center"
              Grid.Column="2"
              Text="{Binding ElementName=textBox, Path=Text,
                       UpdateSourceTrigger=PropertyChanged}" />

  </Grid>
</Window>
You can clearly see my two controls and the binding that links the two. Whenever the Text property of the TextBox changes, the Text property of the TextBlock will be updated. Now let's move the binding to the code-behind.
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
   public MainWindow()
   {
      InitializeComponent();

      // Create a binding object for the Text property of the TextBox.
      Binding binding = new Binding("Text");

      // Set the binding to update whenever the property changes.
      binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

      // Set the source object of the binding to the TextBox.
      binding.Source = textBox;

      // Add the binding to the TextBlock.
      textBlock.SetBinding(TextBlock.TextProperty, binding);
   }
}
You can definitely see the correlation between the XAML and the C#. The first thing we do is create a Binding object and tell it to bind to the Text property of its source object. We then tell the binding to update the destination property whenever the source property changes. We then give it the actual source object - the one that owns the property "Text". Lastly we set the binding on the destination object and specify the property we'd like to bind to. If we run the application, we'd get the exact same behavior.
It's not always obvious where you'll need to specify bindings in the C# code, but one scenario I've encountered in the past is that my source object doesn't exist right away. Sometimes I need to delay the binding until it does, and XAML doesn't have the ability to wait until the source property exists before creating and applying the binding.

Comments

Popular posts from this blog

create a table in SQL

To create a table, you can follow this formula: CREATE TABLE Country( Column1 , Column2 , Column3 ) or: CREATE TABLE Country( Column1 , Column2 , Column3 ); Each column is created as: ColumnName DataType Options Here is an example: CREATE TABLE Customers ( DrvLicNbr nvarchar(32), DateIssued DATE, DateExpired date, FullName nvarchar(50), Address NVARCHAR(120), City NvarChar(40), State NVarChar(50), PostalCode nvarchar(20), HomePhone nvarchar(20), OrganDonor BIT); GO To start from a sample code, open an empty Query window and display the Template Explorer. From the Template Explorer, expand Table. Drag Create Table and drop it in the Query window: -- ========================================= -- Create table template -- ========================================= USE <database, sysname, AdventureWorks> GO IF OBJECT_ID('<schema_name, sysname, dbo>.<table_name, sysname, sample_table>', 'U') IS NOT NULL DROP TABLE <schema_name, sysname, d...

Stored Procedures

Practical Learning: Introducing Stored Procedures Start Microsoft  SQL  Server  Management  Studio  and log in to your  server On the main menu, click File -> New -> Query With Current Connection To create a new database, copy and paste the following code in the Query window:   -- ============================================= -- Database: WattsALoan -- ============================================= USE master GO -- Drop the database if it already exists IF EXISTS ( SELECT name FROM sys.databases WHERE name = N'WattsALoan' ) DROP DATABASE WattsALoan GO CREATE DATABASE WattsALoan GO -- ========================================= -- Table: Employees -- ========================================= USE WattsALoan GO IF OBJECT_ID(N'dbo.Employees', N'U') IS NOT NULL DROP TABLE dbo.Employees GO CREATE TABLE dbo.Employees ( EmployeeID int identity(1,1) NOT NULL, EmployeeNumber nchar(10) NULL, FirstName nvarchar(20) NULL, LastName nvarcha...

Delete a table in SQL

To delete a table using SQL, use the following formula: DROP TABLE TableName The  DROP TABLE  expression is required and it is followed by the name of the undesired table. Here is an example: DROP TABLE Students; GO