Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best place to create a ViewModel in MVVM [closed]

I have a question: Where is the best place to create the ViewModel in MVVM and how?

1) Create once in App.xaml.cs as static field and then use it through App?

2) Alway create new ViewModel in Page.cs, when I navigate to this page?

3) other options

like image 780
Serhii Kyslyi Avatar asked Sep 19 '12 18:09

Serhii Kyslyi


1 Answers

In MVVM, the ViewModel is the application. This means that I usually have an single startup ViewModel that is the entry point to my application, and I typically create an instance of this in the App.xaml.cs OnStartup code

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var app = new ShellView();
    var context = new ShellViewModel();
    app.DataContext = context;
    app.Show();
}

Every once in a while I have an application that will create the ViewModel in the startup window's constructor, but this is not really preferred because it means if I have any startup logic, I have to put that in the code-behind the View as well, and I don't like mixing application logic in my View layer.

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new ShellViewModel();
    }
}

Regardless of how you do it, keep in mind that when using MVVM, your ViewModels are your application, not your Views, so typically your ViewModels are connected in some way to the startup ViewModel. Views are just a user-friendly way for users to interact with your application (the ViewModels).

like image 136
Rachel Avatar answered Oct 09 '22 19:10

Rachel