привязка данных c # со значением структуры

#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. Именно это я и искал, большое вам спасибо за ваш хороший ответ! Теперь просто интересно, как можно сделать то же самое, если приведенный выше пример будет «общедоступным драйвером статического класса»? В случае, если объем данных будет больше, как можно передать одно текстовое поле для добавления соответствующей привязки данных в форму?