| 
                 分類:[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 など実装してみたりしましたが変わらずです)
何か使い方を間違っているでしょうか。
プロパティの指定などが足りないでしょうか。
それとも、同じインスタンスを複数コントロールにバインドした場合はこうなるものでしょうか。
よろしくお願いします。
# 何故かフォントが小さくなる...?
  |