0

これはおそらく winrt の質問よりも mvvm-light の質問ですが、mvvm-light と C# で記述された SQLite を使用するアプリがあります。これは、すべてのシリーズをメイン ページに表示するテレビ番組ライブラリ アプリです。その後、所有しているエピソードなどをドリルダウンできます。いずれにせよ、mvvm-light メッセンジャーを使用して、シリーズ ライブラリ ページのビュー モデルからエピソード ページのビュー モデルにデータを送信します。メッセージを受信したら、SQLite を使用して CombinedVMs という名前の ObservableCollection<object> コレクションを作成します。

問題は、このナビゲーションを行っているときに本当にランダムなエラーが発生するように見えることです。エラーはコード 80131544 で、「ネイティブ フレームがコール スタックの一番上にある」ため、デバッガーから他の情報を取得できません。エラーは、通常、CombinedVMs コレクションに追加しようとすると、常に私の CombinedVMs コレクションで停止するようです。戻るボタンを押すとエラーが発生し、CombinedVMs コレクションがクリアされるメソッドが呼び出されることがあります。シリーズ間を何度も行き来できることもあります...エラーが発生する前に2回だけできることもあります。

これは、エピソード ビューでグループ化された GridView コントロールを使用するコードを、ItemTemplateSelector を使用してシーズン ヘッダーとエピソードを区別するグループ化されていない GridView に変更したときにのみ発生し始めました。SeasonItemViewModels と EpisodeItemViewModels の両方を保持するために CombinedVMs (ObservableCollection<object>) を使用します。

これは、コードの 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>();
    }
}

とにかく、私は困惑しています。進め方がわかりません。この特定のエラー コードについて Microsoft フォーラムにトピックがありますが、これは昨年のものであり、アップデートによって修正されたという主張があります。

他に何か提供できますか?ここからどこへ行けばいいのかわからない....よろしくお願いします!

4

1 に答える 1

1

私は少し前にこれらの1つを持っていました。管理されていないリソースが使用されていて、それらが適切にクリーンアップされていない場合に発生します。SQLLite DB がアンマネージ コードを使用している場合があります。使用後にすべての SQLLite インスタンスを破棄していることを確認することをお勧めします。

于 2013-03-04T12:16:38.090 に答える