我正在 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事件
怎么了?
对不起!它确实发生了变化,但只有在复选框失去焦点之后(验证后)。
我有时很傻
如果我做错了什么(我不擅长数据绑定),如果你指出它,我将非常感激!