Visual Studio 2008 / C# でデスクトップ アプリケーションを作成しています。
小さな会社の 1 週間の勤務スケジュールを生成するエンジンを (ほとんど) 書き終えました。コーススケジューリング問題の一種
現在、エンジンが準拠するための初期パラメーターまたは基準をユーザーが決定できるフォームを設計しています (一部の設定はオプションであるため)。
これらの設定をすべて保持する 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 値をフォームのチェックボックスにバインドしたい
そして、私が驚くべきことに問題に遭遇したのは、その些細な作業でした
「Add New DataSource」ウィザードを使用して、バインディング ソースを作成しました
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イベントは発生しません。
どうしたの?
ごめん!変更されますが、チェックボックスがフォーカスを失った後(検証後)のみです。
私は時々愚かです
とにかく私が何か間違ったことをしている場合 (私はデータバインディングが得意ではありません)、もちろん指摘していただければ幸いです!
