3

MVVM ツールキットを使用しています。私のViewModelsには、ViewModelを別のViewModelに切り替えるときに保存したいデータを保持しています。

ViewModel の切り替えを担当するのは ViewModelLocator です。

http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20 開始点 8.

ViewModelLocator は毎回新しい ViewModel を返します:

public class ViewModelLocator
{
    // Create ProductListViewModel on demand
    public ProductListViewModel ProductListViewModel
    {
        get
        {
            IProductServiceAgent serviceAgent = new MockProductServiceAgent();
            return new ProductListViewModel(serviceAgent);
        }
    }
}

MVVM のルールを破りたくありません。私はこのような新しいオブジェクトを作成することを考えていました:

public class ViewModelLocator
{
    private ProductListViewModel productListViewModel;

    // Create ProductListViewModel on demand
    public ProductListViewModel ProductListViewModel
    {
        get
        {
            IProductServiceAgent serviceAgent = new MockProductServiceAgent();
            if (productListViewModel == null)
                 productListViewModel = new ProductListViewModel(serviceAgent);
            return productListViewModel;
        }
    }
}

...またはViewModelを切り替えている間、ViewModelをシリアライズし、ロードし直すとデシリアライズ...

この問題の適切な解決策は何ですか?

4

1 に答える 1

1

そのためには、任意のタイプの IoC コンテナーを使用することをお勧めします (Unity など)。

public class ViewModelLocator
{
    public static UnityContainer Contaner { get; private set;}

    static ViewModelLocator()
    {
        Container = new UnityContainer();

        Container.RegisterType<ProductListViewModel>(new ContainerControlledLifetimeManager());
    }

    public ProductListViewModel ProductViewModel
    {
        get
        {
            return Container.Resolve<ProductListViewModel>();
        }
    }
}

MVVM Light Toolkit には、IoC コンテナーの軽量実装である SimpleIoc があると思います。

于 2012-03-28T16:47:44.057 に答える