public T this[int index]
        {
            get
            {
                lock (_sync)
                {
                    return(FilteredList.ElementAt(index));
                }
            }
            set
            {
                if (IsReadOnly)
                {
                    throw new InvalidOperationException("List is locked");
                }

                lock (_sync)
                {
                    var i = List.IndexOf(this[index]);
                    if (i < 0)
                    {
                        return;
                    }

                    List[i] = value;
                }

                Changed();
            }
        }