public void UpdateNow()
        {
            if (_provider.IsCollection)
            {
                _depValue.OnGet();

                // Create a list of new items.
                List <CollectionItem> items = new List <CollectionItem>();

                // Dump all previous items into a recycle bin.
                using (RecycleBin <CollectionItem> bin = new RecycleBin <CollectionItem>())
                {
                    foreach (object oldItem in _collection)
                    {
                        bin.AddObject(new CollectionItem(_collection, oldItem, true));
                    }
                    // Add new objects to the list.
                    if (_sourceCollection != null)
                    {
                        foreach (object obj in _sourceCollection)
                        {
                            items.Add(bin.Extract(new CollectionItem(_collection, WrapValue(obj), false)));
                        }
                    }
                    _sourceCollection = null;
                    // All deleted items are removed from the collection at this point.
                }
                // Ensure that all items are added to the list.
                int index = 0;
                foreach (CollectionItem item in items)
                {
                    item.EnsureInCollection(index);
                    ++index;
                }
            }
            else
            {
                object oldValue = _value;
                _depValue.OnGet();
                object newValue = _value;

                if (_initialized)
                {
                    if ((!Object.Equals(newValue, oldValue)))
                    {
                        _wrapper.FirePropertyChanged(_propertyInfo.Name);
                    }
                }
                else
                {
                    _initialized = true;
                }
            }
        }