除非您离开字段,否则C#Databound Windows窗体控件不会保留值

Jer*_*rry 11 c# data-binding winforms

我看到数据绑定Windows窗体控件中的答案在失去焦点之前无法识别更改.

但这并没有完全回答我的问题.我有完全相同的情况.在ToolStrip_click上,我浏览了所有控件并强制执行"WriteValue()",但它仍然会在保存之前恢复到之前的值.任何人都可以建议我如何解决这个问题?我错误地实现了这个吗?

(参见当前(非工作)解决方案的代码.)

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    // Make sure that all items have updated databindings.
    foreach (Control C in this.Controls)
    {
        foreach (Binding b in C.DataBindings)
        {
            // Help: this doesn't seem to be working.
            b.WriteValue();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代码现在变得更加简单,但它是一个相当大的黑客.我很高兴知道是否有更"适当"的解决方案.

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    // Make sure that all text fields have updated by forcing everything
    // to lose focus except this lonely little label.
    label44.Focus();
}
Run Code Online (Sandbox Code Playgroud)

小智 27

问题可能是您的数据绑定控件设置为在验证时更新.

您需要将每个数据绑定控件的DataSourceUpdateMode设置为DataSourceUpdateMode.OnPropertyChanged.例如,数据绑定文本框:

this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", 
    this.someBindingSource, "SomeProperty", true, 
    System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
Run Code Online (Sandbox Code Playgroud)

您还可以通过以下方式在设计器中设置数据源更新模式:

选择控件并转到属性窗口 - >(DataBindings) - >(高级)

- >将下拉列表中的[数据源更新模式]设置为OnPropertyChanged.

干杯