【C#】DataBindingsについて
DataBindingsとは、Windowsフォームアプリケーションにおいて、データソースとコントロールを結びつけるための機能です。DataBindingsを使用することで、コントロールの値をデータソースに反映したり、データソースの変更を自動的に反映したりすることができます。
DataBindingsは、コントロールのDataBindingsプロパティを使用して設定されます。DataBindingsプロパティには、データソースのプロパティ名、データソースのオブジェクト、およびデータソースとコントロールの変換を指定するオプションのオブジェクトが含まれます。たとえば、TextBoxコントロールを使用してデータソースの値を表示する場合、以下のようにDataBindingsを設定することができます。
最初のコード(基本)
以下は、C#言語を使用したWindowsフォームアプリケーションで、DataBindingsとTextBoxを使用してデータを表示する簡単な例です。
まず、フォームにTextBoxコントロールを追加します。これを行うには、Visual Studioのデザイナーでフォームを開き、ツールボックスからTextBoxコントロールをドラッグしてフォームに配置します。
次に、データソースを作成します。この例では、Personクラスを使用します。
Personクラス
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Form1クラス
フォームには、上記のPersonクラスのインスタンスを作成し、初期情報を表示するボタンがあります。
public partial class Form1 : Form
{
private Person person;
public Form1()
{
InitializeComponent();
// Personオブジェクトを初期化する
person = new Person();
person.Name = "山田";
person.Age = 10;
}
private void UpdataButton_Click(object sender, EventArgs e)
{
// Personオブジェクトが更新されているのを確認する
nameTextBox.Text = person.Name;
ageTextBox.Text = person.Age.ToString();
}
}
TextBoxのTextプロパティとPersonクラスのそれぞれのクラスをバインディングしたサンプル
クラス図
実行結果
名前を入力するTextBoxと年齢を入力するTextBoxがあります
入力するたびにpersonオブジェクトのプロパティが更新されます
それを確認するために、プロパティの更新確認ボタンをクリックするとプロパティの情報を表示するようなサンプルになります
フォームデザイン
ソリューション
クラス
personクラス
// INotifyPropertyChangedを実装したPersonクラスを定義する
public class Person : INotifyPropertyChanged
{
// フィールドnameを宣言する(名前)
private string name;
// フィールドageを宣言する(年齢)
private int age;
// Nameプロパティを定義する
public string Name
{
// nameフィールドの値を取得する(ゲッター)
get { return name; }
// nameフィールドの値を設定する(セッター)
set
{
// valueはsetアクセサーに渡された値を表す予約語である
name = value;
// Nameプロパティが変更されたことを通知する
OnPropertyChanged(nameof(Name));
}
}
// Ageプロパティを定義する
public int Age
{
// ageフィールドの値を取得する(ゲッター)
get { return age; }
// ageフィールドの値を設定する(セッター)
set
{
// valueはsetアクセサーに渡された値を表す予約語である
age = value;
// Ageプロパティが変更されたことを通知する
OnPropertyChanged(nameof(Age));
}
}
// PropertyChangedイベントを定義する
public event PropertyChangedEventHandler PropertyChanged;
// プロパティが変更されたことを通知するメソッドを定義する
protected virtual void OnPropertyChanged(string propertyName)
{
// PropertyChangedイベントを発生させる
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
このクラスは、C#のオブジェクト指向プログラミングにおいて、プロパティ変更通知のために使用される標準的なパターンである「INotifyPropertyChanged」インターフェースを実装した、Personという名前のクラスです。
このクラスには、NameとAgeという2つのプロパティがあります。それぞれのプロパティは、値が変更されるとPropertyChangedイベントを発生させます。これにより、UIなどの別のオブジェクトがこれらの変更を検知し、自動的に反映することができます。
具体的には、プロパティのsetアクセサー内で、プロパティが更新されたことを示すOnPropertyChangedメソッドを呼び出しています。このメソッドは、PropertyChangedイベントを発生させ、変更されたプロパティ名をイベント引数として渡しています。
また、PropertyChangedイベントを処理するために、PropertyChangedEventHandlerデリゲート型を使用し、PropertyChangedイベントを購読するために、INotifyPropertyChangedインターフェースを実装しています。
このように、Personクラスは、プロパティ変更通知を実装することで、C#のバインディング機能を使用したデータバインディングやMVVMパターンなど、さまざまなシナリオで利用されます。
Form1クラス
public partial class Form1 : Form
{
private Person person;
public Form1()
{
InitializeComponent();
// Personオブジェクトを初期化する
person = new Person();
// データバインディングを設定する
textBox1.DataBindings.Add("Text", person, "Name");
textBox2.DataBindings.Add("Text", person, "Age");
}
private void UpdataButton_Click(object sender, EventArgs e)
{
// Personオブジェクトが更新されているのを確認する
nameTextBox.Text = person.Name;
ageTextBox.Text = person.Age.ToString();
}
}
このコードは、WindowsフォームアプリケーションのフォームクラスであるForm1を定義しています。
まず、Personオブジェクトを初期化し、textBox1とtextBox2のTextプロパティと、PersonオブジェクトのNameとAgeプロパティをデータバインディングで結びつけています。つまり、textBox1とtextBox2のTextプロパティが変更されると、PersonオブジェクトのNameとAgeプロパティの値も変更されます。
次に、UpdataButton_Clickイベントハンドラーでは、Personオブジェクトが更新されているかどうかを確認するために、personオブジェクトのNameとAgeプロパティの値をそれぞれnameTextBoxとageTextBoxのTextプロパティに設定しています。このボタンは更新のトリガーにしかなっておらず、実際の更新はTextBoxのテキストが変更されたタイミングで自動的に行われるようになっています。
ディスカッション
コメント一覧
まだ、コメントがありません