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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        private async Task _invalidate(RegionService service)
        {
            var entry = await service.CurrentRegionEntry.Get();

            if (entry == RegionEntry.Empty)
            {
                await _ensureWindowCloses(service);
            }
            else
            {
                await _ensureWindowOpen(service);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 protected virtual Task AfterNavigationOverride(RegionService service)
 {
     return(Tasks.Empty);
 }
Beispiel #6
0
 internal Task AfterNavigation(RegionService service)
 {
     return(AfterNavigationOverride(service));
 }
Beispiel #7
0
 internal Task BeforeNavigation(RegionService service)
 {
     return(BeforeNavigationOverride(service));
 }
Beispiel #8
0
        protected override async Task AfterNavigationOverride(RegionService service)
        {
            await base.AfterNavigationOverride(service);

            await _invalidate(service);
        }
Beispiel #9
0
 public Task MoveEntryStateWhere(Func <RegionEntry, bool> entryPicker, RegionService target)
 {
     return(Run(() => _moveEntryStateWhere(entryPicker, target)));
 }
Beispiel #10
0
 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);
 }
Beispiel #11
0
 internal async Task Initialize(RegionService regionService, object param)
 {
     Parameter     = param;
     RegionService = regionService;
     await OnInitialized(param);
 }
Beispiel #12
0
 internal abstract Task AfterNavigation(RegionService service, ContentControl host);