public void OpenApplication(ApplicationViewModel appMdl)
{
if (appMdl == null) throw new ArgumentNullException("appMdl");
var newScope = ViewModelFactory.CreateNewScope();
if (appMdl.WindowModelType != null)
{
var newWorkspace = newScope.ViewModelFactory.CreateViewModel<WindowViewModel.Factory>(appMdl.WindowModelType).Invoke(
newScope.ViewModelFactory.CreateNewContext(ContextIsolationLevel.MergeQueryData), // no data changes in applications! Open a workspace
null
);
newWorkspace.Closed += (s, e) => newScope.Dispose();
ViewModelFactory.ShowModel(newWorkspace, true);
}
else if (appMdl.RootScreen != null)
{
var newWorkspace = newScope.ViewModelFactory.CreateViewModel<NavigatorViewModel.Factory>().Invoke(
newScope.ViewModelFactory.CreateNewContext(ContextIsolationLevel.MergeQueryData), // no data changes on navigation screens! Open a workspace
null,
appMdl.RootScreen
);
newWorkspace.Closed += (s, e) => newScope.Dispose();
ViewModelFactory.ShowModel(newWorkspace, true);
}
else
{
// TODO: protect by constraint. See Case#1649
throw new NotSupportedException("Application has no defined startup Screen");
}
}