КАК работать с переменной, которая сохраняется в строковом контенте (в C#, WPF)

У меня есть цикл для чтения строки за строкой читателя потока. Это работает очень хорошо. Теперь у меня проблемы с чтением файла потокового ридера. Это CSV-файл, который содержит два столбца с информацией. Первый (A) содержит элемент C#, такой как текстовое поле или метку (так же, как "label_1_title"), который объявлен в моем проекте. Второй (B) содержит обычную простую строку, например "Hello".

Теперь я хочу преобразовать содержимое строки столбца в реально существующий элемент. Пример: у меня написано "label_1_title" в столбце A, и это элемент, который существует в моем проекте. Теперь я хочу использовать этот элемент, чтобы (например) изменить его содержимое на содержимое столбца B этой строки.

public void SetSprachpaket(string Sprachpaket)
{
    StreamReader StreamReader = new StreamReader(Sprachpaket, Encoding.UTF8);
    string Inhalt = StreamReader.ReadLine();

    for (int i = 1; Inhalt != null; i++)
    {
        var Items = Inhalt.Split(new Char[] { ';' });

        object Element = Items[0].GetType(); // Convert the string content of Items[1] to the existing object
        Element = Items[1]; // Take this existing object and give it the string content of Items[2]

        Inhalt = StreamReader.ReadLine();
    }
    StreamReader.Close();
}

Я надеюсь, что вы можете мне помочь. Заранее спасибо. С уважением.

РЕДАКТИРОВАТЬ:

object Element = Items[0].GetType(); // Get (let's say) the string "myString"
Element = Items[1]; // --> myString = ...

4 ответа

Решение

Просто с помощью foreach

foreach(control x in this.Control)
{
    if(x.Name == A)  // For A means the name of the object
    { x.Text = B; }  // For B means the string
}

Пожалуйста, не полагайтесь на внутренние имена в вашем проекте. У вас должно быть какое-то явное отображение между элементами и данными столбца.

Дамп файл CSV в Dictionary<string, string> столбца A => столбца B. Для элемента, содержащего все элементы, которые вы хотите заполнить, установите DataContext в словарь. Определите ваши ярлыки следующим образом:

<Label Content="{Binding [label_1_title]}" />

Для получения дополнительной информации см. Обзор привязки данных. Это будет искать ключ словаря "label_1_title" и установить содержимое в значение, когда метка загружается.

Если вы хотите использовать дополнительную привязку данных, кроме словаря меток, я рекомендую использовать пользовательский объект для DataContext, который хранит словарь в свойстве, таком как LabelDictionary, В этом случае привязка должна быть:

<Label Content="{Binding LabelDictionary[label_1_title]}" />

Это не идеально, вам нужно поиграть с этим, но я думаю, что где-то в том направлении, которое вы ищете.

while (Inhalt != null)
{
    switch (Items[0])
    {
        case "label"
            element = new Label();
            element.Text = Items[1];
            break;
        case "textbox"
            element = new Textbox();
            element.Text = Items[1];
            break;
        case "numericUpDown"
            element = new NumericUpDown();
            element.Value = Item[1];
            break;
    }
}

Изменить: если вы не хотите заполнять форму с нуля, используйте this.Controls.Find() чтобы найти контроль с этим именем.

Если элементы [0] - это имя элемента управления, вы можете сделать это, чтобы найти элемент управления.

this.Controls.Find(пункты [0])

вам может потребоваться привести его к соответствующему типу в зависимости от того, какое свойство вы хотите назначить

control.Text = items[1];

Предполагая, что первый столбец - это имя поля в том же классе, а не имя элемента управления, вы можете сделать это

var field = this.GetType().GetField(items[0], 
                                       BindingFlags.Instance 
                                       | BindingFlags.NonPublic);
var control = (Control)field.GetValue(this,null);
control.Text = items[1];
Другие вопросы по тегам