如何为所有绑定写入值

本文关键字:绑定 | 更新日期: 2023-09-27 17:59:29

我计划将.NET数据绑定用于一个小型项目,该项目主要是一个配置编辑器。因此,一组设置被绑定到一个表单,在开始时从app.config加载,并随时保存回来(有提示)。没有格式,没有验证,没有数据库-非常简单的设置。我不相信.NET可以执行随机回调,所以计划使用Binding.WriteValue手动更新,这样用户就可以应用或拒绝所做的任何更改。

是否有任何本机.NET对象可以用于触发所有绑定的WriteValues我看过BindingContextBindingManagerBase,但没有找到一个关于如何使用它们的好例子。

我知道有BindingSource.ResetBindings,它在逻辑上等同于ReadValue(没有ReadValue成员),所以正在寻找类似的东西来写回值。

我希望避免遍历所有控件的层次结构,并分别枚举它们的每个绑定。

如何为所有绑定写入值

我不知道你是否还需要一个答案,但它在这里。

Lambda(短):

Controls.Cast<Control>().ForEach(control=>control.DataBindings.Cast<Binding>().ForEach(binding=>binding.WriteValue()));

经典(长):

foreach (var control in Controls.Cast<Control>())
{
     foreach (var binding in control.DataBindings.Cast<Binding>())
     {
         binding.WriteValue();
     }
}

我不知道你的表单上有多少控件,但这不可能有好的性能。此外,如果您有嵌套控件,则需要递归调用它。

最好将值分配给指定给DataSource的类的Istance。不要将其写入controls属性,最好将其写入数据存储中。则可以使用绑定并调用ResetBindings来刷新值。