|
分類:[C#]
環境
WindowsXP
.NET Framework 4
コントロールの DataBindings プロパティについて質問します。
3つのコントロールに対して一つのクラスをバインドし、DataSourceUpdateMode.Never に設定しています。
各々のコントルールに対して編集後、WriteValue() メソッドを呼んで更新しようと考えました。
以下がソースです。
public class Sample
{
public bool Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
}
フォームにはチェックボックス、テキストボックス、コンボボックスを編集用に配置。
また、ボタンを配置してクリック時に WriteValue() メソッドを実行するテストをしています。
public partial class Form1 : Form
{
private Sample _sample = new Sample();
public Form1()
{
InitializeComponent();
checkBox1.DataBindings.Add("Checked", _sample, "Prop1", true, DataSourceUpdateMode.Never);
textBox1.DataBindings.Add("Text", _sample, "Prop2", true, DataSourceUpdateMode.Never);
comboBox1.DataBindings.Add("SelectedItem", _sample, "Prop3", true, DataSourceUpdateMode.Never);
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.DataSource = new[] { "A", "B", "C" };
}
private void button1_Click(object sender, EventArgs e)
{
Debug.WriteLine(_sample.Prop1.ToString());
Debug.WriteLine(_sample.Prop2);
Debug.WriteLine(_sample.Prop3);
checkBox1.DataBindings["Checked"].WriteValue();
textBox1.DataBindings["Text"].WriteValue();
comboBox1.DataBindings["SelectedItem"].WriteValue();
Debug.WriteLine(_sample.Prop1.ToString());
Debug.WriteLine(_sample.Prop2);
Debug.WriteLine(_sample.Prop3);
}
}
上記のソースの場合、
CheckBox は正しく更新され、Prop1 に反映される。
TextBox は空になり、Prop2 も空のまま。(初期値 null が "" にはなっている)
ComboBox は一度目だけ更新され、Prop3 に反映される。二度目以降は更新されない。
という動きになってしまいます。
(NullValue プロパティや DataSourceNullValue プロパティを設定してみても変わりませんでした)
(INotifyPropertyChanging, INotifyPropertyChanged など実装してみたりしましたが変わらずです)
何か使い方を間違っているでしょうか。
プロパティの指定などが足りないでしょうか。
それとも、同じインスタンスを複数コントロールにバインドした場合はこうなるものでしょうか。
よろしくお願いします。
# 何故かフォントが小さくなる...?
|