private static ActiveListJoinerToReadOnlyList <int, int, int> CreateHasLeft(ActiveListJoinBehaviour joinBehaviour, out ObservableList <int> right)
        {
            right = new ObservableList <int>();
            var joiner = new ActiveListJoiner <int, int, int>(joinBehaviour, (l, r) => l.GetOrElse(0) + r.GetOrElse(0), null, null);
            var result = new ActiveListJoinerToReadOnlyList <int, int, int>(joiner);

            joiner.SetBoth(1, right);
            return(result);
        }
        public ActiveListJoinerToReadOnlyList(ActiveListJoiner <TLeft, TRight, TResult> joiner)
        {
            _joiner = joiner;

            joiner.AddRequested          += Add;
            joiner.RemoveRequested       += Remove;
            joiner.ReplaceRequested      += Replace;
            joiner.ReplaceRangeRequested += ReplaceRange;
            joiner.MoveRequested         += Move;
            joiner.MoveRangeRequested    += MoveRange;
            joiner.ResetRequested        += Reset;
        }