【发布时间】:2010-12-20 19:52:58
【问题描述】:
我正在用 Visual Studio 2008 / C# 编写一个桌面应用程序
我完成了(大部分)编写了一个引擎,它为一家小公司生成了一周的工作时间表;课程安排问题的一种形式
现在我正在设计一个表单,用户可以在其中确定引擎要遵循的初始参数或标准(因为某些设置是可选的)
我有一个名为 EngineParameters 的类,它包含所有这些设置。
出于数据绑定的目的,我创建了一个bndEngineParameters类,它用getter和setter封装了所有相关字段
public class bndEngineParameters
{
private engineParameters _parameters;
public bndEngineParameters(engineParameters ep)
{
this._parameters = ep;
}
public bool avoidGrouping
{
get { return _parameters.avoidGrouping; }
set { _parameters.avoidGrouping = value; }
}
public bool avoidWeekends
{
get { return _parameters.avoidWeekends; }
set { _parameters.avoidWeekends = value; }
}
public bool keyFlow
{
get { return _parameters.keyFlow; }
set { _parameters.keyFlow = value; }
}
public bool keyFlowAssistants
{
get { return _parameters.keyFlowAssistants; }
set { _parameters.keyFlowAssistants = value; }
}
}
它不完整 - 会有 int 值(一个人可以工作的最大小时数等);我希望将这些布尔值绑定到表单上的复选框
正是在这个微不足道的任务中,我出人意料地遇到了问题
使用“添加新数据源”向导,我创建了一个绑定源
private System.Windows.Forms.BindingSource bndEngineParametersBindingSource;
然后我将 Checkbox 的 Checked 属性绑定到绑定源的相应属性:
我实现了一个局部变量 boundParameters 以便我可以访问用户设置的参数
public partial class formGenerateRota : Form
{
public bndEngineParameters boundParameters;
// (...)
public formGenerateRota()
{
InitializeComponent();
}
private void formGenerateRota_Load(object sender, EventArgs e)
{
boundParameters = new bndEngineParameters(new engineParameters());
bndEngineParametersBindingSource.Add(boundParameters);
}
// (...)
}
然后呢?什么都没发生。 bndEngineParametersBindingSource.Current 下有一个 bndEngineParameters 对象(当然是在运行时),但 avoidWeekends 值永远不会改变(当我选中和关闭复选框时),并且bndEngineParametersBindingSource_CurrentItemChanged 事件永远不会触发
怎么了?
对不起!它确实会改变,但只有在复选框失去焦点之后(验证之后)。
有时候我很傻
如果我做错了什么(我不擅长数据绑定),如果您指出这一点,我将不胜感激!
【问题讨论】:
-
重新跟进;看到我说的第一件事:将 DataSourceUpdateMode 设置为 OnPropertyChanged;目前是 OnValidation - 即当你失去焦点时。
标签: c# .net data-binding checkbox bindingsource