C#で多用するデータバインディングの実装方法などを記載していきます。
まずは単純に、Form上に配置した TextBox の Text と特定のプロパティとをバインディングしてみます。
Form
の画面として下記の通りに作成します。
TextBox とバインディングする相手側のプロパティを持つクラス class Person を下記の通り作成します。
このクラスは
INotifyPropertyChanged
のインタフェースを継承して作成します。これを行わないとプロパティの方を変更したときにTextBoxの方が自動的に更新されません。
[プログラムソース "Person.cs"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel; // INotifyPropertyChanged
namespace databinding_01
{
class Person : INotifyPropertyChanged
{
private string _name;
public string name
{
set{
_name = value;
NotifyPropertyChanged("name");
}
get{
return _name;
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion // INotifyPropertyChanged
}
}
[プログラムソース "Form01.cs"]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace databinding_01
{
public partial class Form1 : Form
{
private Person _person;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Close();
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(_person.name, "text確認", MessageBoxButtons.OK);
}
private void Form1_Load(object sender, EventArgs e)
{
_person = new Person();
textBox1.DataBindings.Add("Text", _person, "name"); // 省略表記
// textBox1.DataBindings.Add( new Binding("Text", _person, "name" ) ); // フル表記
}
private void button3_Click(object sender, EventArgs e)
{
_person.name = "名前が変わりました。";
}
}
}
以上で完成です。では実行してみます。
TextBoxに何か文字を入力してから [テキスト確認]
のボタンを押すと、Personクラスのnameプロパティの内容をMessageBoxで表示します。TextBoxのTextとPersonクラスのnameプロパティがバインディングできていることを確認できます。
次に[テキスト修正]のボタンを押すとプログラムでnameプロパティのみを書き換え、これと同時にTextBoxの表示内容が自動的に書き換えられることを確認できます。こちらは Personクラスが INotifyPropertyChange を継承していなければ意図通りに動作しません。
サンプルプログラム: ダウンロード
本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。
2023-08-31 | - | ページデザイン更新 |
2012-04-03 | - | 新規作成 |