/*
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
}
}