我想使用Reflection动态填充我的复选框。
我找到了一个有帮助的答案here
在我的代码中使用它:
public static List<System.Type> getModuleList()
{
// fill with all Classes in Timestamp.View.UserControls.ModuleView per Reflection
List<System.Type> theList = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == "Timestamp.View.UserControls.ModuleView")
.ToList();
return theList;
}
我填写了我的复选框,如:
foreach (System.Type type in ModuleController.getModuleList())
{
cbModule1.Items.Add(type);
cbModule2.Items.Add(type);
cbModule3.Items.Add(type);
cbModule4.Items.Add(type);
}
现在我想创建一个新的SelectedType实例
private void CbModule4_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ucModul4.Content = //new Instance of Selected Item
}
我可以使用Reflection创建一个新实例,但我不知道如何。
编辑:我需要争论为什么我的问题与this one
不同首先,这个问题只能解决我的一个问题,但我之前发现它并没有帮助我。我不知道如何获得列表的类型以及如何为该类提供别名。
答案 0 :(得分:1)
因为将Type
添加到组合框会生成type.ToString()
并将字符串表示放入combobox
,您可以使用
var instance = Activator.CreateInstance(Type.GetType(cbModule4.SelectedText))
传递类型时,您可以执行以下操作:
var instance = Activator.CreateInstance(theList[0]))