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.
干杯