【发布时间】:2017-07-13 14:40:41
【问题描述】:
我想使用反射来动态填充我的复选框。
我找到了一个有帮助的答案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 }
我可以使用反射创建一个新的实例,但我不知道如何。
- 我想给每个类一个字符串,它将在复选框中显示为项目。这是可能的,还是我需要一个方法来通过它的字符串找到一个类?
编辑:我需要争论为什么我的问题与 this one 不同
所以首先这个问题只能解决我的一个问题,但我更早发现它并没有帮助我。我不知道如何获取列表的类型以及如何为类指定别名。
【问题讨论】:
-
不要对命名空间进行反射,定义一个共享接口,因为它们似乎都有一些共同点,然后只获取实现该接口的类型。然后你可以用类型化的方式填写你想要的属性,大概它们会有一个标签和一个选中的属性
-
@Icepickle 他们都有一个名为 IModuleView 的共享接口。但是我如何让所有类实现这个接口?
标签: c# wpf .net-4.0 system.reflection