UWP重置主框架

时间:2016-10-18 18:54:11

标签: uwp mvvm-light

我有一个MVVM Light UWP项目,我想重置应用程序并重新加载UI。我希望我可以调用我的App类来做这件事,但我发现了奇怪的事情。

作为测试,如果我打电话

Window.Current.Content = null;

在我的应用中的页面内形成,然后窗口的内容区域按预期变为空白。但是如果重新运行我的设置代码来设置AppShell(我的根容器页面)并将Window.Current.Content设置为,那么没有任何改变。

ViewModel构造函数不再被命中,所以我怀疑这个问题与MVVM Light如何实例化ViewModel有关。也许我需要做些什么来获得一个新的实例?

1 个答案:

答案 0 :(得分:0)

我认为问题是你设置Window.Current.Content = null;,MVVM Light Window.Current.ContentFrame,通常我们称之为rootFrame,你可以从App.xaml.cs代码中看到它:

Frame rootFrame = Window.Current.Content as Frame;

一旦将其设置为null,那么用于托管页面的Frame就会消失,您需要首先创建一个Frame的新实例,就像在{{App.xaml.cs中一样。 1}}:

if (rootFrame == null)
{
    // Create a Frame to act as the navigation context and navigate to the first page
    rootFrame = new Frame();

    rootFrame.NavigationFailed += OnNavigationFailed;

    if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
    {
        //TODO: Load state from previously suspended application
    }

    // Place the frame in the current Window
    Window.Current.Content = rootFrame;
}

if (rootFrame.Content == null)
{
    // When the navigation stack isn't restored navigate to the first page,
    // configuring the new page by passing required information as a navigation
    // parameter
    rootFrame.Navigate(typeof(MainPage), e.Arguments);
}

由于您没有发布任何设置AppShell的“设置代码”的代码,我在这里写一个答案,只是猜测代码可能出现的问题,这是我重置页面的演示:

Window.Current.Content = null;
var rootFrame = new Frame();
Window.Current.Content = rootFrame;
await Task.Delay(1000);
_navigationService.NavigateTo(ViewModelLocator.SecondPageKey, "lala");

如果仍有问题,请发表评论或与我们分享更多代码。