通过另一个活动打开视图

时间:2014-05-13 06:55:30

标签: c# wpf

我有几个需要打开的视图,但我不想重复代码。目前,每个按钮都会触发以下内容:

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();
}

任何帮助将不胜感激(再次)。

1 个答案:

答案 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。

我希望这是有道理的。

相关问题