Web検索はbingがおすすめ!

TextBlockコントロールにデータをバインディングする - コードによるデータバインディング - WPF

コードによるデータバインディングの方法を紹介します。

UI

WPFアプリケーションを新規作成します。メインのフォーム(MainWindow.xaml)にTextBlockコントロールを配置します。


コード

以下のコードを記述します。

Bird.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WpfBinding3
{
  public class Bird
  {
    public string Name
    {
      get;
      set;
    }
  }
}
解説
Birdクラスを定義します。Nameプロパティを一つ持つクラスです。

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfBinding3
{
  /// <summary>
  /// MainWindow.xaml の相互作用ロジック
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
      
      Bird bird = new Bird();
      bird.Name = "Penguin";

      Binding binding = new Binding("Name");
      binding.Source = bird;

      textBlock1.SetBinding(TextBlock.TextProperty, binding);
    }
  }
}
解説
Bird bird = new Bird();
bird.Name = "Penguin";
データを保持するクラスのインスタンスを作成し、データを設定します。

Binding binding = new Binding("Name");
binding.Source = bird;
Bindingクラスのインスタンスを作成します。コンストラクタの引数にパスを指定します。今回はNameプロパティの情報を用いるため、"Name"を引数に与えます。また、Sourceプロパティにはデータソースのクラスのインスタンスを設定します。

textBlock1.SetBinding(TextBlock.TextProperty, binding);
textBlock1にデータバインディングします。Textプロパティに対してデータバインディングするため、最初の引数は"TextBlock.TextProperty"を与えます。第二引数にバインディングするBindingクラスのインスタンスを与えます。

実行結果

アプリケーションを実行します。下図の結果が得られます。

補足

public MainWindow()
{
  InitializeComponent();
      
  Bird bird = new Bird();
  bird.Name = "Penguin";

  Binding binding = new Binding("Name");
  binding.Source = bird;

  textBlock1.SetBinding(TextBlock.TextProperty, binding);
}
は、
public MainWindow()
{
  InitializeComponent();
      
  Bird bird = new Bird();
  bird.Name = "Penguin";

  Binding binding = new Binding("Name");
  this.DataContext = bird;

  textBlock1.SetBinding(TextBlock.TextProperty, binding);
}
と記述することもできます。DataContextにデータソースを代入するとBindingクラスのインスタンスのSourceプロパティに設定せずにデータバインディングができます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-03-08
iPentec all rights reserverd.