Wpf 在Windows 8应用程序中离开XAML页面时,XAML对象是否仍然虚拟存在?

Wpf 在Windows 8应用程序中离开XAML页面时,XAML对象是否仍然虚拟存在?,wpf,xaml,windows-8,mvvm-light,Wpf,Xaml,Windows 8,Mvvm Light,我使用MVVM Light工具箱定义视图模型和视图之间的关联 指示容器将视图模型注册为单个实例。因此,当需要GagaViewModel时,始终会返回相同的实例: public GagaViewModel GagaViewModel { get { var vm = ServiceLocator.Current.GetInstance<GagaViewModel>(); vm.Setup(); //Clear the Observable

我使用MVVM Light工具箱定义视图模型和视图之间的关联

指示容器将视图模型注册为单个实例。因此,当需要GagaViewModel时,始终会返回相同的实例:

public GagaViewModel GagaViewModel
{
    get
    {
        var vm = ServiceLocator.Current.GetInstance<GagaViewModel>();
        vm.Setup(); //Clear the ObservableCollection
        return vm;
    }
}
public GagaViewModel GagaViewModel
{
得到
{
var vm=ServiceLocator.Current.GetInstance();
vm.Setup();//清除ObservableCollection
返回虚拟机;
}
}
您可以单击PriorGaga.xml上的缩略图项目。然后在Gaga.xaml的GridView“MyGridView”中选择自选项。Gaga.xaml文件的代码隐藏:

protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
    var itemId = navigationParameter as String;
    if (String.IsNullOrEmpty(itemId))
    {
        throw new ArgumentException("navigationParameter was either null or empty");
    }

    await ((GagaViewModel)DataContext).Init(itemId); //Busy(-Indicator) while loading data from server, filling the ObservableCollection and writing the selected item down

    BringItemIntoView();
}

private void BringItemIntoView()
{
    var vm = (GagaViewModel)DataContext;

    Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                        () => MyGridView.ScrollIntoView(vm.SelectedItem));
}
protected override async void LoadState(对象导航参数,字典页面状态)
{
var itemId=导航参数作为字符串;
if(String.IsNullOrEmpty(itemId))
{
抛出新ArgumentException(“navigationParameter为null或空”);
}
wait((gagagaviewmodel)DataContext).Init(itemId);//忙(-Indicator),同时从服务器加载数据,填充ObservableCollection并向下写入所选项目
BringItemIntoView();
}
私有void brinGitMinotoView()
{
var vm=(GagaViewModel)数据上下文;
Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
()=>MyGridView.ScrollIntoView(vm.SelectedItem));
}
那很好。作为示例:项目#45立即出现在视口中(从开始处纠正视口的位置)


但是,当您单击“上一步”按钮并通过选择任意缩略图项返回Gaga.xaml时(比如说#29),您将看到项目#1,然后切换到#29(视口正在容器上方移动)。有人知道下面发生了什么吗?容器中是否有之前Gaga.xaml访问中的虚拟化项目?

我的理解是,Gaga页面实例的生命周期由其
导航缓存模式
属性决定。默认情况下,它被设置为
禁用
。假设您没有更改此属性,那么每次导航到Gaga页面时,您都会看到一个新的Gaga页面实例。可以通过在其构造函数中设置断点来验证此行为。因此,我认为每次导航到Gaga时,UI的行为都应该是相同的,因为一切都是新鲜的

(我想加上这句话作为评论,因为我还没有回答你的问题,但遗憾的是我没有足够的代表。我提前道歉;请不要打倒我!)