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を愛用