Keeping view models alive

In Catel, view models are automatically closed when the UserControl is unloaded from the visual tree. This is because there is no guarantee that the control will be loaded again. This works great in most of the cases, but sometimes you need more control about the lifetime of the view model. One good example is the use of the TabControl. When a tab control contains a user control with a view model, every time a new tab is selected, the controls on the previously selected tab are unloaded (and thus the view models are closed).

It is possible to have more control about the lifetime of view models. To keep a view model alive, even when the view is unloaded, set the CloseViewModelOnUnloaded property of the UserControl to false in the constructor of the view:

CloseViewModelOnUnloaded = false;

The view model will now be re-used when the view is loaded into the visual tree again.

Keep in mind that the developer is responsible for actually closing the view model

Orc.Controls contains an implementation of a TabControl that gives more control over the lifetime of the tabs

The Catel Examples repository contains an example demonstrating controlling the lifetime of view models


Have a question about Catel? Use StackOverflow with the Catel tag!


Discussion