/* In App.xaml: In the View: DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName}" OR (WPF only): xmlns:vm="clr-namespace:MyFriendsAround.WP7.ViewModel" DataContext="{Binding Source={x:Static vm:ViewModelLocatorTemplate.ViewModelNameStatic}}" */ using MyFriendsAround.WP7.Helpers.Navigation; using MyFriendsAround.WP7.Utils; using NetworkDetection; namespace MyFriendsAround.WP7.ViewModel { /// /// This class contains static references to all the view models in the /// application and provides an entry point for the bindings. /// /// Use the mvvmlocatorproperty snippet to add ViewModels /// to this locator. /// /// /// In Silverlight and WPF, place the ViewModelLocatorTemplate in the App.xaml resources: /// /// /// <Application.Resources> /// <vm:ViewModelLocatorTemplate xmlns:vm="clr-namespace:MyFriendsAround.WP7.ViewModel" /// x:Key="Locator" /> /// </Application.Resources> /// /// /// Then use: /// /// /// DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName}" /// /// /// You can also use Blend to do all this with the tool's support. /// /// /// See http://www.galasoft.ch/mvvm/getstarted /// /// /// In *WPF only* (and if databinding in Blend is not relevant), you can delete /// the Main property and bind to the ViewModelNameStatic property instead: /// /// /// xmlns:vm="clr-namespace:MyFriendsAround.WP7.ViewModel" /// DataContext="{Binding Source={x:Static vm:ViewModelLocatorTemplate.ViewModelNameStatic}}" /// /// public class ViewModelLocator { /// /// Initializes a new instance of the ViewModelLocator class. /// public ViewModelLocator() { if (ViewModelBase.IsInDesignModeStatic) { // Create design time view models } else { //Register PageNavigation - only if not design time Container.Instance.RegisterInstance(typeof(PageNavigation), "PageNavigation"); // Create run time view models } } /// /// Gets the Main property. /// public MainViewModel Main { get { MainViewModel mainViewModel = GetViewModel(Constants.VM_MAIN); return mainViewModel; } } /// /// Gets the About property. /// public SettingsViewModel Settings { get { SettingsViewModel aboutViewModel = GetViewModel(Constants.VM_SETTINGS); return aboutViewModel; } } /// /// Cleans up all the resources. /// public void Cleanup() { MainViewModel mainViewModel = GetViewModel(Constants.VM_MAIN); mainViewModel.Cleanup(); SettingsViewModel aboutViewModel = GetViewModel(Constants.VM_SETTINGS); aboutViewModel.Cleanup(); } #region Local Helpers public static T GetViewModel(string key) where T : ViewModelBase { // Create a new view model T vm = Container.Instance.Resolve(key); //Assign the Context from PageNavigation to Context property of the ViewModelBase vm.Context = vm.PageNav.CurrentContext; return vm; } #endregion } }