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); }