Мне нужно включить / отключить кнопку SAVE в режиме реального времени на основе данных в моих полях.
Является ли приведенный ниже приемлемый способ для достижения этой цели? Это неправильно, но я не знаю, как еще я мог бы сделать это.
Каждый пользовательский элемент управления ( CRUD Form ) имеет BackgroundWorker
и следующие связанные методы;
StartBGWorker()
StopBGWorker()
RequiredFieldsValid()
Там цель самоочевидна, я надеюсь. Процесс идет таким образом, что когда пользователь нажимает NEW или EDIT, он вызывает StartBGWorker()
, который создает новый BackgroundWorker
и вызывает RunDataASync()
. DoWork()
метод BGWorker выглядит следующим образом:
void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ucNavDiagnosis.btnSave.Enabled = Convert.ToBoolean(e.UserState);
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
bgWorker.ReportProgress(0, RequiredFieldsValid());
System.Threading.Thread.Sleep(500);
}
}
private bool RequiredFieldsValid()
{
// TODO: Add other required fields
return (!memAllergies.Text.Equals(string.Empty));
}
Это работает, но ощущается как "буш-лига". В любом случае, когда пользователь нажимает СОХРАНИТЬ или ОТМЕНА, делается звонок на StopBGWorker()
, который Disposes
рабочий.
В качестве еще одного отказа от ответственности, это приложение в настоящее время не использует привязку. Это длинное объяснение, но это, как говорится.