c#MVVM重启和主菜单按钮

时间:2016-04-20 13:21:35

标签: c# wpf mvvm

在我的View文件夹中,我有MainWindow和GameWindow,在我的ViewModel文件夹中,我有MainWindowViewModel和GameWindowViewModel。我正在尝试使用我的GameWindowViewModel:

1)点击ICommand和此功能

重启我的GameWindow
void restartButtonClickFunction(object obj)
    {
        GameWindow gamewindow = new GameWindow();
        Application.Current.GameWindow.Close();
        gamewindow.Show();
    }

2)点击ICommand和以下功能

再次转到我的MainWindow
void mainMenuButtonClickFunction(object obj)
    {
        MainWindow mainwindow = new MainWindow();
        Application.Current.GameWindow.Close();
        mainwindow.Show();
    }

它给了我错误,我无法找到另一种方式。在我的MainWindowViewModel中,我使用以下函数进行管理

void startButtonClickFunction(object obj)
    {
        GameWindow gamewindow = new GameWindow();
        Application.Current.MainWindow.Close();
        gamewindow.Show();
    }

2 个答案:

答案 0 :(得分:1)

评论摘要:

Application.Current.MainWindow不是对MainWindow课程的引用,Application上的属性指示哪个Window是'主',请参阅{{3 }}

这意味着没有属性Application.Current.GameWindow

相反,您可以使用Application.Current.Windows获取所有当前Windows的集合,然后比较类型以获取您要关闭的类型:

foreach (var window in Application.Current.Windows)
{
    if (window is GameWindow)
    {
        ((Window)window).Close();
    }
}

或者,您可以将当前Window存储在属性中以便轻松关闭它

答案 1 :(得分:0)

它适用于MainMenu按钮,但当我尝试使用以下代码重新启动窗口时,当前Window关闭但不会再次打开并给出以下错误:PresentationFramework中出现未处理的“System.InvalidOperationException”类型异常的.dll

附加信息:窗口关闭后,无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle。

 void restartButtonClickFunction(object obj)
    {
        GameWindow gamewindow = new GameWindow();
        foreach (var window in Application.Current.Windows)
        {
            if (window is GameWindow)
            {
                ((Window)window).Close();
            }
        }
        gamewindow.Show();
    }