4
votes

I am fairly new to following the MVVM pattern. I am using MVVMLight. I am wondering how have multiple unique instances of the ViewModel with MVVM Light. For exmaple I have an application that can open n number of windows. Each uses the same Viewmodel. I am curious in MVVM whats the best practive to give them there own instance.

If I follow the MVVM Light example the ViewModeLocator will have only a static instance which each window will end up using.

Thanks in advance.

2
Similar question answered by Laurent stackoverflow.com/a/2848084/762979keft
The MVVM pattern does not limit you to only one instance of a view model. A view model is just a class like any other class and you can can create as many objects of that class as you need. The MVVM pattern exists simply to separate business logic from UI logic for purpose of unit testing. That is all. Any other claims made in the name of MVVM are most likely the result of some form of misguided idealism rather than any practical common sense reason.bugged87

2 Answers

5
votes

You are not obliged to use ONLY the static view models in the view model locator. That approach only makes sense if your views are sharing the same view model instance. For your scenario, you would simply new up an instance of your view model and assign it to the DataContext property of each window you create.

public void ShowChildWindow(Window parent)
{
    var window = new WindowView();
    window.DataContext = new ViewModel();
    window.Show();
}
10
votes

Easy:

public EndingViewModel EndingViewModel
{
    get 
    { 
      return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString()); 
    }
}

When resolving from the ServiceLocator make sure the call to GetInstance passes in a unique value to the method. In the above example I pass in a guid.

I really wouldn't build your objects manually as this defeats the point of having the Dependency Injection container in MVVM Light.