我在运行时根据字段列表中的某些参数创建表单。
List<Fields> lstFields = new List<Fields>()
{
new Fields(){ FieldType = Fields.fieldTypes.INPUT, Info = "Some Info", Label = "first", Mandatory= true},
new Fields(){ FieldType = Fields.fieldTypes.CHK, Info ="Some Info", Label="Second",
Items = new List<String>(){"item1","item2","item3","item4"} },
new Fields(){ FieldType = Fields.fieldTypes.INPUT, Label = "Name", Mandatory= true},
new Fields(){ FieldType = Fields.fieldTypes.INPUT, Label = "Surname", Mandatory= true},
new Fields(){ FieldType = Fields.fieldTypes.COMBO, Label = "City", Mandatory = false,
Items = new List<String>(){"item1","item2","item3","item4"}}
}
我在foreach声明中创建了我的字段:
foreach (Fields fd in lstFields)
{
[...]
switch (fd.FieldType)
{
case Fields.fieldTypes.INPUT:
TextBox currentTB = new TextBox(); //It violates MVVM pattern :(
content.Add(currentTB);
[...]
break;
[...]
default:
break;
}
}
}
我需要一个表单验证策略。我所知道的所有策略都基于绑定。问题是我无法绑定属性,因为我在动态创建控件。我想按照MVVM设计模式解决问题。
答案 0 :(得分:1)
你说你想用MVVM来解决它,但你已经通过在代码中创建视图元素来公然违反它。您应该做的是创建视图模型来表示您要创建的GUI项目,在ItemsControl中显示它们,并使用DataTemplates和Triggers的组合自动为您创建视图控件。通过这样做,您可以确保所有内容都是数据绑定的,并且您可以正确地遵守MVVM;然后在任何其他MVVM应用程序中完成数据验证。
事实证明,前几天我回答了一个问题并发布了code showing exactly how to do this。