public WindowCtlModel()
        {
            WindowVisible = WindowState
                            .Select(state => state != Minimized)
                            .ToReadOnlyReactivePropertySlim();

            var a = WindowViewed.Where(r => ValidTrigger(r, true, true));
            var b = WindowResized.Where(r => ValidTrigger(r, false, false));
            var c = TimerTick.Where(r => ValidTrigger(r, false, true));

            NonOverlapLocation = Observable
                                 .Merge(a, b, c)
                                 .Select(MoveToNonOverlapPosition)
                                 .Where(p => p.HasValue)
                                 .Select(p => p.Value)
                                 .ToReadOnlyReactivePropertySlim(mode: DistinctUntilChanged | IgnoreException);
        }