这可能是一个mvvm-light问题,而不是一个winrt问题,但我有一个使用mvvm-light的应用程序和用C#编写的SQLite。它是一个电视节目库应用程序,在主页面上显示您的所有系列。然后,您可以深入了解您拥有的剧集等等。无论如何,我使用mvvm-light messenger将系列库页面视图模型中的数据发送到剧集页面的视图模型。我填充ObservableCollection< object>在收到消息时使用SQLite调用CombinedVMs的集合。
麻烦的是,我在进行此导航时似乎存在真正的随机错误。错误是代码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>();
}
}
无论如何,我很难过。我不知道该怎么办。微软论坛上有一个关于这个特定错误代码的话题,但它是从去年开始的,而且声称已经从更新中修复了它。
我可以提供其他任何东西吗?我不知道从哪里开始......提前致谢!
答案 0 :(得分:1)
我刚才有一个这样的人。如果您使用了非托管资源并且未正确清理它们,则会发生这种情况。您可能会发现SQLLite DB正在使用非托管代码。我建议您通过并确保在使用后处置所有SQLLite实例。