Есть несколько способов сделать это.
Один из них использует Reflection, как и вы, но у вас могут возникнуть проблемы с производительностью.
Другой способ - немного устроить данные и модель, которые вы получаете с сервера, могут быть чем-то похожим на то, что вы можете использовать на некоторых фабриках для создания вашей View / VM:
Так что это может быть:
public enum DataType
{
String,
Number,
Boolean,
List,
// and any other types that you need
}
public class OptionItemModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public class FieldModel
{
public DataType Type { get; set; }
public string DefaultValue { get; set; } // this is a serialized value
public List<OptionItemModel> Options { get; set; } // this only applies to DataType -> List
}
public class StructureModel
{
public List<FieldModel> Fields { get; set; }
}
Итак, вы может иметь ObservableCollection
на вашей виртуальной машине, и ваши элементы могут быть созданы фабрикой, повторяющейся для каждого из полей структуры, и поэтому вы можете иметь собственные модели представления элементов в зависимости от типа данных поля.
Тогда у вас может быть список в вашем представлении, в котором используется селектор шаблонов, в котором вы можете создать Cell/Row
в зависимости от DataType
или ItemViewModel
, и это будет все.
Тогда вы можете иметь аналогичная структура модели для заполнения значений и загрузки их на сервер.
Надеюсь, это достаточно ясно