C#:데이터 바인딩하는 단 하나,사용자 정의 클래스를 형성하 제어(확인란?)
-
05-07-2019 - |
문제
쓰고 있어요 데스크탑 응용 프로그램은 Visual Studio2008/C#
나는 완성되는(주)작성 엔진을 생성하는 작업에 대한 일주일을 위한 작은 회사의 양식 과정-scheduling 문제
바로 지금 나는 디자인 형태에서는 사용자를 결정할 수 있는 초기 변수,또는 기준에 대한 엔진을 준수하(으로 어떤 설정 옵션)
어 클래스 이름 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 값(최대의 시간 동안 하나의 작업할 수 있습 etc.);내가 원하는 사람들 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;