#c# #data-binding
#c# #привязка данных
Вопрос:
Мне нужна помощь в отношении драйвера, который я создаю. У меня есть структура некоторых данных в моем статическом классе. Данные этого структурного объекта должны обрабатываться извне моего класса драйверов. В моем классе я должен подготовить несколько текстовых полей, которые могут быть назначены и использованы извне класса. Каждое значение структуры становится одним текстовым полем. Теперь моя проблема в том, что я должен соединить эти динамические изменяемые значения структуры с соответствующим текстовым полем. Я должен использовать привязку данных, потому что мне придется использовать огромное количество данных.
Пожалуйста, ознакомьтесь со следующим фрагментом кода для понимания:
public static class driver
{
#region " data preparation "
//structure definition
public struct _data
{
public string moduleName;
public string dynamicNumber1;
//...
}
//instance object of struct
private _data moduleData = new _data();
//get;set property
public _data pModuleData
{
get
{
return moduleData;
}
set
{
moduleData = value;
}
}
#endregion
//build data binding(s) for each single "moduleData.structureItem"
//???????????????????? moduleData_itemBinding_ModuleName
//???????????????????? moduleData_itemBinding_dynamicNumber1
//...
#region " form elements preparation for external assignments "
//instance of forms objects, data can be assigned and used outside of this public static class
public static System.Windows.Forms.TextBox textBox_ModuleName = new System.Windows.Forms.TextBox();
public static System.Windows.Forms.TextBox textBox_dynamicNumber1 = new System.Windows.Forms.TextBox();
#endregion
#region " class initialisation "
static driver()
{
// class initialisation part
textBox_ModuleName.DataBindings = moduleData_itemBinding_ModuleName; //assign databindings from above ???????????
textBox_ModuleName.DataBindings = moduleData_itemBinding_dynamicNumber1; //adding databindings from above ???????????
}
#endregion
}
Спасибо за помощь!
Комментарии:
1. этот класс драйвера должен позволить другим разработчикам в моей команде легко и быстро подключать некоторые предопределенные текстовые поля, связанные с описанными элементами структуры. Эта структура будет заполнена специальным интерфейсом связи с контроллером реального времени. Итак, на данный момент это должна быть структура.. Кроме того, текстовое поле становится еще несколькими настройками в этом классе, поэтому его нужно определить один раз, а вне класса все эти свойства могут быть назначены помещенному текстовому полю в другом классе формы. Спасибо за помощь!
Ответ №1:
Я думаю, что это можно сделать следующим образом. Определите свой класс:
public class Driver
{
public Driver(TextBox moduleName, TextBox dynamicNumber)
{
textBox_ModuleName = moduleName;
textBox_DynamicNumber = dynamicNumber;
textBox_ModuleName.DataBindings.Add("Text", this, "ModuleName");
textBox_DynamicNumber.DataBindings.Add("Text", this, "DynamicNumber");
}
public string ModuleName { get; set; }
public string DynamicNumber { get; set; }
private TextBox textBox_ModuleName;
private TextBox textBox_DynamicNumber;
}
Затем создайте текстовые поля в форме:
var textBox1 = new TextBox { Parent = this };
var textBox2 = new TextBox { Parent = this, Top = 30 };
Создайте экземпляр вашего класса и передайте ему эти текстовые поля:
var driver = new Driver(textBox1, textBox2);
driver.ModuleName = "foo";
driver.DynamicNumber = "bar";
// data will be appear in the textboxes
Это работает.
Комментарии:
1. Именно это я и искал, большое вам спасибо за ваш хороший ответ! Теперь просто интересно, как можно сделать то же самое, если приведенный выше пример будет «общедоступным драйвером статического класса»? В случае, если объем данных будет больше, как можно передать одно текстовое поле для добавления соответствующей привязки данных в форму?