示例#1
0
        protected override void ConfigureViewModelLocator()
        {
            ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
            {
                string?viewName         = viewType.FullName;
                viewName                = viewName?.Replace(".Views.", ".ViewModels.");
                string?viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
                string?suffix           = viewName != null && (viewName.EndsWith("View") | viewName.EndsWith("Window")) ? "Model" : "ViewModel";
                string viewModelName    = string.Format(CultureInfo.InvariantCulture, "{0}{1}, {2}", viewName, suffix, viewAssemblyName);
                return(Type.GetType(viewModelName));
            });

            ViewModelLocationProvider.SetDefaultViewModelFactory((view, type) =>
            {
                object vm = ContainerLocator.Container.Resolve(type);

                if (vm is IViewAwareStatusInjectionAware contextViewModel)
                {
                    IViewAwareStatus service = ContainerLocator.Container.Resolve <IViewAwareStatus>();
                    service.InjectContext(view);
                    contextViewModel.InitialiseViewAwareService(service);
                    return(vm);
                }

                if (vm is IWindowAwareStatusInjectionAware contextWindowModel)
                {
                    IWindowAwareStatus service = ContainerLocator.Container.Resolve <IWindowAwareStatus>();
                    service.InjectContext(view);
                    contextWindowModel.InitialiseWindowAwareService(service);
                    return(vm);
                }

                return(vm);
            });
        }
 public void InitialiseWindowAwareService(IWindowAwareStatus window)
 {
     window.Loaded        += Window_Loaded;
     window.Activated     += Window_Activated;
     window.WindowClosing += Window_WindowClosing;;
 }