C#:数据结合一个单一的、定义类形成的控制(框?)
-
05-07-2019 - |
题
我写桌面应用程序在Visual Studio2008/C#
我完成了(主要)编写一个引擎,它生成了一个工作计划,每周为一个小型的公司;一种形式的课程安排问题
现在我设计的一种形式,其中可以确定用户的最初参数或准则,对发动机坚持(作为一些设置可选)
我有一类叫EngineParameters,它拥有所有的那些设置。
用于该目的的数据绑定,我创建了一个 bndEngineParameters 级,这封装所有相关领域吸气,并制定者
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值(最多一个小时可以工作等);我想那些bool值受到的选择框在我的形式
它是在这一简单的任务我在那里令人惊讶的是遇到了问题
使用"添加新的数据源"向导,我创建了一个结合源
private System.Windows.Forms.BindingSource bndEngineParametersBindingSource;
然后我开的 检查 酒店我框到各自的财产我的结合的资料来源:
我实现了一个地方变量 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);
}
// (...)
}
和什么?什么也不会发生。有一个bndEngineParameters目下 bndEngineParametersBindingSource.电流 (在运行时的课程),但是 avoidWeekends 值永远不会改变(当我检查的框和关闭), bndEngineParametersBindingSource_currentitemchanged 事件是从来没有发射
怎么了?
对不起!它不会改变,但只有在框失去焦点(后验证)。
我愚蠢的时候
如果我做错了什么无论如何(我不是任何好的数据结合),我非常感谢如果你指出来,当然!
解决方案
两个共同的问题:
- 设置
DataSourceUpdateMode
要OnPropertyChanged
- (可选)收到的变化 从 的对象,实施
{name}Changed
事件的图案或INotifyPropertyChanged
说实话不过,我敢肯定,大多数的不必要的;你应该只能够说:
myCheckbox.Bindings.Add("Checked", myEngineParameters, "avoidWeekends",
false, DataSourceUpdateMode.OnPropertyChanged);
充满例子:
using System;
using System.Diagnostics;
using System.Windows.Forms;
class EngineParameters {
private bool avoidWeekends;
public bool AvoidWeekends {
get { return avoidWeekends; }
set {
avoidWeekends = value;
Debug.WriteLine("AvoidWeekends => " + value);
}
}
}
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
using(Form form = new Form())
using (CheckBox myCheckbox = new CheckBox()) {
EngineParameters myEngineParameters = new EngineParameters();
myEngineParameters.AvoidWeekends = true;
form.Controls.Add(myCheckbox);
myCheckbox.DataBindings.Add("Checked", myEngineParameters, "AvoidWeekends",
false, DataSourceUpdateMode.OnPropertyChanged);
Application.Run(form);
}
}
}
其他提示
而不是:
bndEngineParametersBindingSource.Add(boundParameters);
这样做:
bndEngineParametersBindingSource.DataSource = boundParameters;
不隶属于 StackOverflow