Динамически добавлять свойства в существующий класс для использования с DataGrid? - PullRequest
0 голосов
/ 16 марта 2020

Мне нужно сделать свойства динамически. потому что мне нужно привязать к DataGrid.

Я сделал простой класс, но у меня больше нет идей.

public class MyDataModel {
    public int Id {get; set;}
    public string Name {get; set;}
    public bool CheckItem1 {get; set;}
    public bool CheckItem2 {get; set;}
    public bool CheckItem3{get; set;}
    ....
    public bool CheckItenN {get; set;}
}

var checkList = GetCheckItems();
foreach(var item in checkList){
    //I want to add item's property to MyDataModel.
}

Ответы [ 3 ]

2 голосов
/ 16 марта 2020

Хотя это не отвечает на вопрос, я думаю, что ваша настоящая проблема может быть решена путем привязки к DataTable.

Приведенный ниже код создает динамические c столбцы и строки для нового DataTable;

DataTable datatable = new DataTable(); 
datatable.Columns.Add("Col1");
datatable.Columns.Add("Col2");

DataRow row = datatable.NewRow();
row["Col1"] = "One";
row["Col2"] = "Two";
datatable.Rows.Add(row);

Привязать к результату.

0 голосов
/ 16 марта 2020

Я согласен с @TemaTre, динамическое создание классов возможно, но это не рекомендуемый способ решения подобных проблем.

Создание переменных "свойств" может быть решением, но они быстро загромождают ваш код.

Хотя есть альтернативы. Вы можете привязать DataGrid к словарю ( Привязка словаря к DataGridView в C#? ) или к списку списков ({ ссылка }).

Эти способы являются более мощными, более легко расширяемыми и более простыми в обслуживании.

0 голосов
/ 16 марта 2020

Итак, теоретически вы можете динамически создавать новый класс, который расширяет текущий и добавляет новые свойства. А затем используйте его с ключевым словом dynamic.

Но это не тривиально и будет очень медленно. C# не является языком сценариев. И вот почему вы должны написать большинство этих вещей.

Итак, вы можете создать свойство, и оно будет равно нулю в тех случаях, когда вам не нужно это свойство. Но в других случаях вы настроите это свойство и будете его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...