private Task _ensureWindowOpen(RegionService service) { if (!service.Hosts.OfType <Window>().Any()) { var w = new Window(); w.Unloaded += (s, e) => { var action = _onClosing; _onClosing = null; action?.Invoke(); }; Application.Current.Exit += (s, e) => { var action = _onClosing; _onClosing = null; action?.Invoke(); }; _myWindows.Add(w); w.Style = WindowStyle; RegionHost.SetRegion(w, service.Region); w.Show(); } return(Tasks.Empty); }
private Task _ensureWindowCloses(RegionService service) { var windows = service.Hosts.OfType <Window>(); var mine = windows.Intersect(_myWindows).ToList(); foreach (var win in mine) { win.Close(); _myWindows.Remove(win); } return(Tasks.Empty); }
private async Task _invalidate(RegionService service) { var entry = await service.CurrentRegionEntry.Get(); if (entry == RegionEntry.Empty) { await _ensureWindowCloses(service); } else { await _ensureWindowOpen(service); } }
private Task _ensureWindowOpen(RegionService service) { if (!service.Hosts.OfType <Window>().Any()) { var w = new Window(); w.SizeToContent = SizeToContent; w.WindowStartupLocation = WindowStartupLocation; _myWindows.Add(w); w.Style = WindowStyle; RegionHost.SetRegion(w, service.Region); // simply calling ShowDialog will block the method, so e need to trick it... w.Dispatcher.BeginInvoke(new Action(() => { // make sure window was not closed since dispatching if (_myWindows.Contains(w)) { w.ShowDialog(); } })); } return(Tasks.Empty); }
protected virtual Task AfterNavigationOverride(RegionService service) { return(Tasks.Empty); }
internal Task AfterNavigation(RegionService service) { return(AfterNavigationOverride(service)); }
internal Task BeforeNavigation(RegionService service) { return(BeforeNavigationOverride(service)); }
protected override async Task AfterNavigationOverride(RegionService service) { await base.AfterNavigationOverride(service); await _invalidate(service); }
public Task MoveEntryStateWhere(Func <RegionEntry, bool> entryPicker, RegionService target) { return(Run(() => _moveEntryStateWhere(entryPicker, target))); }
private async Task _moveEntryStateWhere(Func <RegionEntry, bool> entryPicker, RegionService target) { var entries = _savedStates.Keys.Where(entryPicker).ToArray(); var states = entries.ToDictionary(entry => entry, entry => _savedStates.GetAndRemove(entry)); await target._importEntryStates(states); }
internal async Task Initialize(RegionService regionService, object param) { Parameter = param; RegionService = regionService; await OnInitialized(param); }
internal abstract Task AfterNavigation(RegionService service, ContentControl host);