如何为所有绑定WriteValue

时间:2013-02-15 19:57:42

标签: c# vb.net data-binding

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

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

我知道有BindingSource.ResetBindings,这是ReadValue的逻辑等价物(没有ReadValue成员),所以寻找这样的东西来重写这些值。

我想避免遍历所有控件层次结构并单独枚举每个绑定。

1 个答案:

答案 0 :(得分:1)

我不知道你是否还需要答案,但现在就是。

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。不要将它写入控件属性,最好将其写入数据存储。然后你可以使用绑定并调用ResetBindings来刷新值。