 <p>Use Inversion Of Control (IOC) and the Service Locator pattern to create a shared data service they both talk too. I notice your mvvm-light tag; I know a default Mvvm-light project uses a ViewModelLocator class and SimpleIOC so you can register a data service like below.</p> <pre><code>public class ViewModelLocator { static ViewModelLocator() { ServiceLocator.SetLocatorProvider(() =&gt; SimpleIoc.Default); SimpleIoc.Default.Register&lt;IDataService, DataService&gt;(); } } </code></pre> <p>An interface is used so we can swap out the DataService at will and even have a different one for design time. So you will create an interface that defines methods you will use and just make sure your DataService implements them. It is in your DataService implementation you will use the shared context / source.</p> <pre><code>public class DataService: IDataService { //USE SAME SOURCE (example EF) private SharedSourceEntities context; (blah blah)... } </code></pre> <p>After you can inject it into both view models either in the constructor or calling the service locator.</p> <p><strong>Dependency Injection:</strong></p> <pre><code>public class ViewModelOne: ViewModelBase { private readonly IDataService dataService; public ViewModelOne(IDataService dataService) { this.dataService = dataService; } } public class ViewModelTwo: ViewModelBase { private readonly IDataService dataService; public ViewModelTwo(IDataService dataService) { this.dataService = dataService; } } </code></pre> <p><strong>Service location:</strong></p> <pre><code>SimpleIoc.Default.GetInstance&lt;IDataService&gt;(); </code></pre>