Let's imagine that you have two pages: MainPage.xaml and SecondPage.xaml.
also you have two viewModels MainViewModel.cs and SecondViewModel.cs
if you use some MVVM framework (MVVM light for example http://mvvmlight.codeplex.com/ ) you can use a ViewModelLocator, or you can write your own.
so, in OnNavigatied event in every page you can run this code:
var viewModel = ViewModelLocator.MainViewModel;
this.DataContext = viewModel;
Also you can do in a xaml. See the example here : http://jesseliberty.com/2011/01/04/wpfs-mvvm-light-toolkit-soup-to-nuts-part-i/
You can inject a data provider to every view model. So, when the user adds data on the MainPage, MainViewModel saves the data to the data provider (wich holds the data in a memory, or saves it to the isolated storage.)
Then, when you navigates to the SecondPage, SecondViewModel gets a data from the dataProvider.
ViewModelLocator should be responcible for Main and Second view models has the same DataProvider instance.
If you need to pass any flag (was the data updated, Id, ect) you can do it by passing it in a Query String. ( http://jesseliberty.com/2011/01/09/passing-parameters-with-behaviors-in-mvvm-light-for-windows-phone/ )
This variant is good because your app can be thombstoned ( http://blogs.microsoft.co.il/blogs/arik/archive/2011/05/01/managing-tombstone-state-in-a-windows-phone-7-application.aspx) by the OS in any moment. You can handle this situation by sending a signal (executing a command, sending a message) to a current view model. And it will save data to storage. The