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