我打算对一个小项目使用.NET数据绑定,这个项目主要是一个配置编辑器。因此,一组设置绑定到一个表单,在开始时从app.config加载,并随时保存回来(带有提示)。没有格式化,没有验证,没有数据库 - 非常简单的设置。我不相信.NET会执行随机回调,因此请计划使用Binding.WriteValue
进行手动更新,以便用户可以应用或拒绝所做的任何更改。
我是否可以使用任何本机.NET对象来触发WriteValues
所有绑定?我查看了BindingContext
和BindingManagerBase
,但是没有找到关于如何使用它们的好例子。
我知道有BindingSource.ResetBindings
,这是ReadValue
的逻辑等价物(没有ReadValue
成员),所以寻找这样的东西来重写这些值。
我想避免遍历所有控件层次结构并单独枚举每个绑定。
答案 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来刷新值。