WinForms: ответ на применяемый BindingSource
Есть ли событие, на которое я могу получить уведомление, когда источник данных будет применен к связанным элементам управления?
Или есть другое событие, в котором я гарантирую, что источник данных был применен?
Я работаю с WinForms (из WPF) и использую теги со значениями, связанными с данными, чтобы определить тип элемента управления, с которым я работаю. Многие элементы управления могут иметь одинаковое значение тега, и я должен получить элементы управления с нужным тегом для выполнения бизнес-логики.Проблема в том, что я не знаю, когда выполнять поиск значений тегов. Я попытался найти значения тега сразу после вызова:
myBindingSource.DataSource = OutputFunctions.Instance;
//Yes... I'm binding to a singleton with a list of properties.
//Its not the best method, but works.
внутри моегоForm.Load
обработчик события. Но во время поиска я увидел, что значения тегов не установлены. Как это может быть, если я только что установил источник данных?
Как видно из внутреннего кода для моей формы, я правильно установил значение в окне свойств дизайнера:
this.textBoxDTemp.DataBindings.Add(new System.Windows.Forms.Binding(
"Tag",
this.myBindingSource,
"KNOB_DRIVER_TEMP",
true));
Я посмотрел наBindingComplete
, который, честно говоря, выглядит очень многообещающим, за исключением того, что он не срабатывает во время инициализации привязки, даже если значение предположительно распространяется от источника данных к целевому элементу управления.
РЕДАКТИРОВАТЬ: Согласно запросу, источник данных сначала устанавливается во внутреннем коде для формы как таковой:
this.myBindingSource.DataSource = typeof(OutputFunctions);
А вот и синглтон на случай, если это поможет.
public class OutputFunctions
{
private static OutputFunctions instance;
public static OutputFunctions Instance
{
get
{
if (instance == null)
{
instance = new OutputFunctions();
}
return instance;
}
}
private OutputFunctions() { }
public string KNOB_DRIVER_TEMP { get { return "KNOB_DRIVER_TEMP"; } }
public string KNOB_PASSENGER_TEMP { get { return "KNOB_PASSENGER_TEMP"; } }
public string KNOB_FAN { get { return "KNOB_FAN"; } }
}