async Task <IObservable <WorkitemEventArgs> > LaunchWorkItem(Type type, IWorkItem parent, object data, bool isModal, ModalOptions metadata = null) { IWorkitemBehaviorCollection behaviorCollection = Container.Resolve <IWorkitemBehaviorCollection>(); if (!await behaviorCollection.Behavior.OnLaunching(this, new Behaviors.WorkitemLaunchDescriptor(type, parent == null, isModal, parent))) { return(null); } if (!typeof(IWorkItem).IsAssignableFrom(type)) { throw new ArgumentException("Workitem to be launched must be of type IWorkItem"); } IWorkItem workitem = (IWorkItem)Container.Resolve(type); WorkitemLaunchStrategy strategy = WorkitemLaunchStrategy.GetLaunchStrategy(this, workitem, parent, data); if (isModal) { return(await strategy.LaunchModal(metadata).ConfigureAwait(false)); } else { return(await strategy.Launch().ConfigureAwait(false)); } }
internal IModalWindow InitModalWindow(IModalWindow popup, IWorkItem workItem, ModalOptions metadata) { if (metadata == null) { metadata = workItem.Configuration.GetOption <ModalOptions>(); } global::Prism.Regions.RegionManager.SetRegionManager(popup.GetRegionHolder(), global::Prism.Regions.RegionManager.GetRegionManager(Application.Current.MainWindow)); global::Prism.Regions.RegionManager.UpdateRegions(); popup.WindowStartupLocation = metadata.WindowStartupLocation; if (!metadata.Size.IsEmpty) { popup.Width = metadata.Size.Width; popup.Height = metadata.Size.Height; } popup.ResizeMode = metadata.ResizeMode; popup.Title = workItem.WorkItemName; popup.Closing += (o, args) => ModalWindowClosing(workItem, args); return(popup); }
public Task <IObservable <WorkitemEventArgs> > LaunchModalWorkItem <T>(ModalOptions metadata, object data = null, IWorkItem parent = null) where T : IWorkItem { return(LaunchWorkItem(typeof(T), parent, data, true, metadata)); }