7

私は MVVM パターンを研究し、それを Windows Phone 8 アプリで実践しています。アプリで ViewModel を初期化してアクセスするためのベスト プラクティスについて質問があります。

WP8 SDK テンプレートからデータバインド アプリケーションを作成すると、 App.xaml.csファイルに次のコードがあることに気付きました。

public static MainViewModel ViewModel
{
    get
    {
        // Delay creation of the view model until necessary
        if (viewModel == null)
            viewModel = new MainViewModel();

            return viewModel;
    }
}

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    // Ensure that application state is restored appropriately
    if (!App.ViewModel.IsDataLoaded)
    {
        App.ViewModel.LoadData();
    }
}

私が理解していることから、それはAppクラスにMainViewModelが静的メンバーとして含まれており、アプリケーションがアクティブ化されると ViewModel が読み込まれることを意味します。

そういうわけで、以下の質問があります。

  1. アプリに複数の ViewModel がある場合、それらはすべてApp.xaml.csファイル内のメンバーとして保存されますか?

  2. すべての ViewModel のデータが同時に読み込まれる場合、アプリのメモリをどのように管理すればよいですか? 各ビューモデルのデータをアンロードして、自分のビューで使用されているビューモデルのみをロードすることはできますか?

4

1 に答える 1

8

ViewModel をインスタンス化するには、さまざまな方法があります。起動時にすべてインスタンス化するものもあれば、必要になるまで ViewModel をインスタンス化しないものもあります。

次のブログ投稿では、ViewModel をインスタンス化するためのいくつかの可能な方法を見つけることができます。

MVVM インスタンス化アプローチ

ご質問にお答えします。1.-アプローチに従って、App.xaml.csファイルですべてのViewModelのメンバーを定義する必要があります。2.-必要になるまでViewModelをインスタンス化しないアプローチに従うことができます。

MVVM LightCaliburn Microなど、MVVM パターンの実装を容易にするツールキットがいくつかあります。私は個人的に、Locator アプローチを使用するMVVM Light Toolkitを使用しています。このツールキットを使用すると、ViewModel はデフォルトで必要に応じてロードされますが、起動時に特定の ViewModel をロードするように設定できます。これは、いくつかのシナリオで役立ちます。

于 2013-09-24T08:42:25.970 に答える