私は、1つのウィンドウと、MVVM Lightからのメッセージを使用してrelayCommandsで互いに置き換えているいくつかのuserControlsで構成されるWPFのクックブックウィンドウアプリケーションに取り組んでいます。
アプリケーションは、entityFramework から生成された DB で動作します。ファイルの最初の実行以外の後に発生する問題は、プログラムが次のような多くの警告とエラーを表示することです。
Warning 1 Could not copy "...\cookbook\Cookbook.Services\Database1.mdf" to "bin\Debug\Database1.mdf". Beginning retry 1 in 1000ms. The process cannot access the file '...\cookbook\Cookbook.Services\Database1.mdf' because it is being used by another process. Cookbook.Services
ViewModelLocator には次のものがあります。
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainWindowViewModel>();
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<FoodTypeViewModel>();
SimpleIoc.Default.Register<ShoppingCartViewModel>();
SimpleIoc.Default.Register<MenuViewModel>();
SimpleIoc.Default.Register<MenuListViewModel>();
SimpleIoc.Default.Register<MenuCalendarViewModel>();
SimpleIoc.Default.Register<ChooseFoodWindowViewModel>();
}
また、userControls を切り替えるために使用しているメッセージは、次のような ViewModels の新しいインスタンスを作成しています。
BackToMainCommand = new RelayCommand(() =>
{
Messenger.Default.Send<ViewModelBase>(new MainViewModel());
},
() => true);
ViewModel をいじってシングルトンにし、システム内に単一のコピーしか存在しないようにしましたが、SimpleIoc には登録用のパブリック コンストラクターが必要です。また、それが私の問題に役立つかどうかもわかりません。また、言いませんでしたが、ViewModelLocator は xaml でのみ使用されるため、クリーンアップするためのインスタンスすらありません。(使い方が悪いのかもしれませんが、使い方がわかりません)
問題は、私が言及した多くの場所で作成され、それらのいくつかがおそらく *.mdf ファイルを保持しているため、すべての ViewModel をクリーンアップする方法と場所がわからないことです。