我使用MVVM Light Toolkit定义 View 模型和 View 之间的关联。

指示容器将 View 模型注册为单例实例。因此,当需要GagaViewModel时,总是会返回相同的实例:

public GagaViewModel GagaViewModel
{
    get
    {
        var vm = ServiceLocator.Current.GetInstance<GagaViewModel>();
        vm.Setup(); //Clear the ObservableCollection
        return vm;
    }
}

您可以单击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));
}

很好作为示例:项#45立即出现在视口中(从头开始正确的视口位置)。

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

最佳答案

我的理解是,您的Gaga页面实例的寿命由其NavigationCacheMode属性决定。默认情况下,它设置为Disabled。假设您尚未更改此属性,则每次导航至该页面时,您应该会看到Gaga页面的新实例。您可以通过在构造函数中设置断点来验证此行为。因此,我认为每次导航到Gaga时,UI的行为都应该相同,因为一切都是新鲜的。

(我想将此添加为评论,因为我实际上尚未回答您的问题,但可惜我没有足够的代表。我事先表示歉意;请不要打扰我!)

关于wpf - 在Windows 8 App中离开XAML页面时,XAML对象是否仍然存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16090594/

10-10 02:57