문제

쓰고 있어요 데스크탑 응용 프로그램은 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;

나는 다음 결합 검사 시설 내에 있는 체크박스 해당 시설 내 바인딩 소스:

alt text

내가 구현된 지역 변수 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; 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top