0

这可能是一个 mvvm-light 问题,而不是一个 winrt 问题,但我有一个使用 mvvm-light 和用 C# 编写的 SQLite 的应用程序。这是一个电视节目库应用程序,可在主页上显示您的所有系列。然后,您可以深入了解您拥有的剧集等等。无论如何,我使用 mvvm-light messenger 将数据从系列库页面的视图模型发送到剧集页面的视图模型。在收到消息后,我使用 SQLite 填充名为 CombinedVMs 的 ObservableCollection<object> 集合。

问题在于,我在进行此导航时似乎确实存在随机错误。错误是代码 80131544,我无法从调试器中获取任何其他信息,因为“本机框架位于调用堆栈的顶部”。该错误似乎总是在我的 CombinedVMs 集合中停止,通常是在我尝试添加它时。有时,当我点击后退按钮并调用一个方法来清除 CombinedVMs 集合时会发生错误。我有时可以多次在系列之间来回导航......有时我可以在它遇到错误之前只做两次。

当我将代码从在剧集视图上使用分组 GridView 控件更改为使用 ItemTemplateSelector 区分季节标题和剧集的非分组 GridView 时,这才开始发生在我身上。我使用 CombinedVMs (ObservableCollection<object>) 来保存 SeasonItemViewModels 和 EpisodeItemViewModels。

我想知道这是否与我如何设置代码的 mvvm-light 部分有关。以下是我的导航方式。

public RelayCommand GoToSeriesCommand
{
    get
    {
        return _gotoSeriesCommand ?? (_gotoSeriesCommand = new RelayCommand(() =>
              {
                  SimpleIoc.Default.GetInstance<SeriesViewModel>();
                  Messenger.Default.Send<NavigateToSeriesViewMessage>(new NavigateToSeriesViewMessage() 
                  { 
                      FolderGuid = this.FolderGuid,
                      DisplayName = this.DisplayName,
                      FanartPathList = this.FanartPathList,
                      SeriesId = this.SeriesId
                  });
                  MainViewModel._navigationService.Navigate(typeof(SeriesView));
              }));
    }
}

我的 ViewModelLocator 里面有这个是相关的:

static ViewModelLocator()
{
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

    if (ViewModelBase.IsInDesignModeStatic)
    {
        SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
        SimpleIoc.Default.Register<INavigationService, DesignNavigationService>();
    }
    else
    {
        SimpleIoc.Default.Register<IDataService, DataService>();
        SimpleIoc.Default.Register<INavigationService>(() => new NavigationService());
    }

    SimpleIoc.Default.Register<SeriesViewModel>();

}

public SeriesViewModel SeriesVM
{
    get
    {
        return ServiceLocator.Current.GetInstance<SeriesViewModel>();
    }
}

static public SeriesViewModel SeriesVMStatic
{
    get
    {
        return ServiceLocator.Current.GetInstance<SeriesViewModel>();
    }
}

无论如何,我很难过。我不知道如何进行。微软论坛上有一个关于这个特定错误代码的主题,但它是从去年开始的,并且声称它已从更新中修复。

我还能提供什么吗?我不知道从这里去哪里....提前谢谢!

4

1 回答 1

1

不久前我有一个。如果您使用了非托管资源并且没有正确清理它们,它们就会发生。您可能会发现 SQLLite DB 正在使用非托管代码。我建议您仔细检查并确保在使用后处理所有 SQLLite 实例。

于 2013-03-04T12:16:38.090 回答