如何在导航回到它时不重新复制视图的datacontext(因此不再调用VM构造函数)

时间:2017-04-10 15:24:01

标签: mvvm uwp

所以我有2个观点。我在view1中做我做的事情,数据是绑定。当我点击按钮我去view2,我做我做的,然后回到view1。当然在InitializeComponent();后面的view1代码中并设置视图DataContext = IocContainer.StaticContainer.Resolve<MediaViewModel>();

的DataContext

所以每次我回到view1时都会调用viewModel的构造函数并创建新对象(所以我会丢失一些数据)。如何不在navigateBack上调用conscructor来查看或不再次初始化新对象?

1 个答案:

答案 0 :(得分:3)

如果要在导航期间保持页面状态,则需要设置Page.NavigationCacheMode。这会将前一个实例保留在内存中,并在导航回来时使用它。

默认情况下,在UWP中,当您转到下一个导航时,导航始终会丢弃当前页面。当您返回时,它会重新创建整个页面,包括数据上下文和该页面所需的任何其他数据元素。这样做确实会降低内存使用率。

请注意,因为您保留在内存中的每个页面都会在您的应用中占用更多内存。

在构造函数中执行此操作的代码:

public MyPage()
{
    // Page cached if the cache size of the parent Frame is large enough
    NavigationCacheMode = NavigationCacheMode.Enabled;

    // Or, page is always cached
    NavigationCacheMode = NavigationCacheMode.Required;
}