ここでは、C# で記述された Windows フォーム アプリケーションについて説明します。単純なモデルを考える
class Labelled
{
private string label;
public string Label
{
get { return label; }
set
{
if (label != value)
{
string message = String.Format(
"Label changed from {0} to {1}",
label, value
);
MessageBox.Show(message);
label = value;
}
}
}
public Labelled(string label)
{
this.label = label;
}
}
class Model
{
public Labelled SingularLabelled { get; set; }
public List<Labelled> ListedLabelled { get; set; }
public Model()
{
SingularLabelled = new Labelled("Singular");
ListedLabelled = new List<Labelled>();
for (int i = 1; i <= 10; ++i)
ListedLabelled.Add(new Labelled("Listed " + i.ToString()));
}
}
Labelled文字列プロパティを持つ単純なクラスと、型のメンバーを持つLabelクラスがあり、これは のリストです。ModelSingularLabelledLabelledListedLabelledLabelled
次に、データをユーザーに表示したいと思います。これが私のセットアップです:

メイン ウィンドウには、TextBox表示用SingularLabelled.Labelの とDataRepeater、Visual Basic PowerPacks の要素のラベルを表示するための がありListedLabelledます。のItemTemplateはDataRepeater1 つの だけで構成されTextBoxます。
一方向バインディングに焦点を当てましょう。つまり、ユーザーがテキスト ボックスの内容を変更したときに、基になるデータを更新したいと考えています。のLabelプロパティはLabelled、メッセージ ボックスの形式で通知を発生させるので、データがいつ更新されるかを正確に知ることができます。現在、矢印はバインディングを表しています。青い矢印はデータ ソースを表し、赤い矢印はデータ メンバーを表します。のインスタンスが作成され、メイン ウィンドウ フォームのコンストラクターで にModelバインドされます。modelBindingSource
そして、ここで非常に重要なことに行き着きます。ユーザーが入力しているものと同期してデータをすぐに更新したいので、データ バインディングのデータ ソース更新モードが に設定されていることを確認しましたOnPropertyChanged。ここで興味深いと思われる生成コードは次のとおりです。
this.singularTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.modelBindingSource, "SingularLabelled.Label", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.listedTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listedLabelledBindingSource, "Label", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
これは、テキスト ボックスに入力するときに期待どおりに機能しますSingularLabelledが、テキスト ボックス内のテキスト ボックスはDataRepeater、フォーカスを失った場合にのみ更新をトリガーします。私は彼らが特異なもののように振る舞うことを望みます。理想的な解決策は、デザイナーを使用して行うことです。誰もこれを行う方法を知っていますか?


上記は、プログラムが動作するサンプルです。文字が入力されるたびに のラベルがどのように更新され、対応するテキスト ボックスがフォーカスを失った後、SingularLabelledのメンバーが編集されたチャンク全体を更新するかに注目してください。ListedLabelled