private void ReplaceItemsCollection(ObservableCollection <TItem> items)
        {
            RegistryBase <TItem> registry = _registry;

            lock (_replaceItemsLocker)
            {
                if (_items != null)
                {
                    _items.CollectionChanged -= Items_CollectionChanged;
                }
                if (registry != null && _items != null)
                {
                    _registry.RemoveCollectionFromTrace(_items);
                }
                _items = items;
                if (registry != null && _items != null)
                {
                    _registry.AddCollectionToTrace(items);
                }
                if (items != null)
                {
                    items.CollectionChanged += Items_CollectionChanged;
                }
                IDisposable safeUsageOperation = EnterSafeUsage();
                if (safeUsageOperation == null)
                {
                    return;
                }
                using (safeUsageOperation)
                    using (_itemsLocker.EnterWriteLock())
                        _itemsAreModified = true;
            }
        }