我正在尝试将一些UserControl-Infos保存到这样的列表中:
List<UserControlDetails> myList;
public UserControlDetails
{
string Description { get; set; }
Type UserControlType { get; set; }
}
现在,如果我在ListView中显示此List,我希望能够启动我的UserControl,例如通过SelectedItem属性,如
//SelectedItem.UserControlType = MyMainViewModel;
var tmp = new SelectedItem.UserControlType(); //This will return a new instance of MainViewModel
任何想法如何做到这一点?还是其他想法?
非常感谢!
干杯
编辑:感谢一大堆回复。另一个问题:如何将“MaiNViewModel”的类型保存到类型变量中?我得到“类名无效”错误EDIT2:知道了,它是typeof()。我现在将尝试这些方法并尽快报告
答案 0 :(得分:6)
我想你想要:
object tmp = Activator.CreateInstance(SelectedItem.UserControlType);
如果它总是成为某种常见类型的后代(例如UserControl
),那么你可以将它投射出来:
Type type = SelectedItem.UserControlType;
UserControl tmp = (UserControl) Activator.CreateInstance(type);
// You can now use the members of UserControl on tmp.
这假设有一个公共无参数构造函数,因为这是Activator.CreateInstance
调用的内容。
答案 1 :(得分:4)
肮脏而简单的方式:Activator.CreateInstance。 恕我直言,你应该试试factory。
答案 2 :(得分:0)
var tmp = Activator.CreateInstance(SelectedItem.UserControlType);
答案 3 :(得分:0)
// assuming you want to use the default constructor
object control = Activator.CreateInstance(SelectedItem.UserControlType);
答案 4 :(得分:0)
您可以使用Activator.CreateInstance(Type t)从类型信息创建新实例。