我有几个需要打开的视图,但我不想重复代码。目前,每个按钮都会触发以下内容:
private void icon_Add(object sender, RoutedEventArgs e)
{
viewName var = new viewName();
var.Show();
Close();
}
理想情况下,我喜欢这样的东西(但不知道我应该使用什么类型的变量/对象):
private void icon_Add(object sender, RoutedEventArgs e)
{
OpenView(viewName)
}
private voice OpenView(?????? newView)
{
newView var = new newView();
var.Show();
Close();
}
任何帮助将不胜感激(再次)。
答案 0 :(得分:2)
您可以使用Activator.CreateInstance来解决它。
private void icon_Add(object sender, RoutedEventArgs e)
{
OpenView(typeof(viewName));
}
private void OpenView(Type newView)
{
if(typeof(Window).IsAssignableFrom(newView)) {
Window window = (Window)Activator.CreateInstance(newView);
window.Show();
window.Close();
}
}
这意味着您将通过您想要打开OpenView方法的窗口类型。此方法使用默认构造函数创建实例。然后它将在创建的窗口上调用Show和Close。在所有这之前的IF是为了检查传递的Type 是否是窗口。
如果您没有在每个Window上都有默认构造函数,也可以将构造函数参数传递给CreateInstance。
我希望这是有道理的。