/* In App.xaml: <Application.Resources> <vm:ViewModelLocator xmlns:vm="clr-namespace:" x:Key="Locator" /> </Application.Resources> In the View: 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 */ using System; using CommonServiceLocator; using GalaSoft.MvvmLight.Ioc; using GalaSoft.MvvmLight.Views; using SubCabinetSolution.Utils; namespace SubCabinetSolution.ViewModel { /// <summary> /// This class contains static references to all the view models in the /// application and provides an entry point for the bindings. /// </summary> public class ViewModelLocator { private static ViewModelLocator _default; private static readonly object InstanceLock = new object(); public static ViewModelLocator Default { get { if (_default == null) { lock (InstanceLock) { if (_default == null) _default = new ViewModelLocator(); } } return _default; } } /// <summary> /// Initializes a new instance of the ViewModelLocator class. /// </summary> public ViewModelLocator() { ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); // 注册页面VM SimpleIoc.Default.Register<MainViewModel>(); //登录页 SimpleIoc.Default.Register<CabinetViewModel>(); //主界面 SimpleIoc.Default.Register<InquirePageViewModel>(); //查询Page页 // 注册导航Service INavigationService navigationService = this.InitNavigationService(); SimpleIoc.Default.Register(() => navigationService); } /// <summary> /// 创建NavigationService对象 /// </summary> /// <returns>NavigationService</returns> private INavigationService InitNavigationService() { NavigationService service = new NavigationService(); service.Configure("MainWindow", new Uri("/SubCabinetSolution;component/Views/MainWindow.xaml", UriKind.Relative)); service.Configure("CabinetWindow", new Uri("/SubCabinetSolution;component/Views/CabinetWindow.xaml", UriKind.Relative)); service.Configure("InquirePage", new Uri("/SubCabinetSolution;component/Views/InquirePage.xaml", UriKind.Relative)); return service; } /// <summary> /// 导航Service /// </summary> // public INavigationService NavigationService => ServiceLocator.Current.GetInstance<INavigationService>(); // 每个VM都需要生成对应的实例,不然会报空指针 public MainViewModel MainWindow => ServiceLocator.Current.GetInstance<MainViewModel>(); public CabinetViewModel CabinetWindow => ServiceLocator.Current.GetInstance<CabinetViewModel>(); public InquirePageViewModel InquirePage => ServiceLocator.Current.GetInstance<InquirePageViewModel>(); public static void Cleanup() { // TODO Clear the ViewModels } } }