0

私は現在アプリに取り組んでおり、いくつかの「アーキテクチャ上の混乱」があります。

私は独自の(非常に単純な)MVVMパターンを実装しています。これは、理想的には1つのインスタンスのみを持ち、約60秒ごとに更新されます。

以前のアプリのWindowsPhone7でXaml(Silverlight)を実行すると、ViewModelをアプリクラス(アプリケーションの開始場所)に配置でき、最初の読み込み後にアプリ全体でこの1つのモデルにアクセスできました。プロセスが完了しました。

私はインターネットを検索し、チュートリアル/サンプルをダウンロードして、Windows 8StoreAppsに決定的な答えを提供できる場所があるかどうかを確認してきました。

そして今、これがWindows 8ストアアプリでの正しい作業方法であるかどうか疑問に思っていますか?

これが私が探求したいくつかの働き方です:

  • MainPage.csファイルにViewModelがあり、各ナビゲートメソッドで、次に使用するページのページパラメーターとしてViewModelを渡しています。
  • App.csファイルにViewModelがあり、これを試しましたが、他のページからこれにアクセスできないようです
  • アプリケーションのすべての情報を保持する静的なViewModelクラスがあります。これを行った他のプロジェクト/サンプルは見られなかったので、私は標準から「脱却」してこれを行うことに少し消極的です。

これは考えられており、Windows 8ストアアプリでこれを行う方法があると確信していますが、決定的な答えを見つけるのに苦労しており、私が遭遇した公式(MSDN)サンプル/チュートリアルの多くは実際にはこの問題に対処していません。サンプルの多くは、利用可能なAPIの非常に小さな側面をカバーしているようです。

要約:Windows 8ストアアプリケーションを構築し、すべてのページがアプリケーション全体でバインド/使用できる1つのViewModelを作成するにはどうすればよいですか?これには、アプリケーションとデータの保存方法に関するアーキテクチャの変更が必要ですか、それともViewModelをグローバルにすることができる方法を見逃したことがありますか?

再度、感謝します :)

4

1 に答える 1

3

一般に、ほとんどのアプリケーションはページごとに異なるビュー モデルを使用するため、ビュー モデルが共有されている例はあまり見られません。ビューごとに (ページ固有のコードを使用して) 個別のビュー モデルを使用する方がよい場合がありますが、共有データ モデルを使用することをお勧めします。

ViewModel をすべてのページで共有したい場合は、(静的クラスではなく) ViewModel で静的な「インスタンス」プロパティを試すことができます。

例えば、

public class MyViewModel
{
    private static MyViewModel instance;

    private MyViewModel()
    {
        // Private constructor
    }

    public static MyViewModel Instance
    {
        get
        {
            if (instance == null)
                instance = new MyViewModel();

            return instance;
        }
    }
}
于 2012-11-21T13:04:00.320 に答える