internal override void OnEditCanceled(DataGridItemEventArgs e)
        {
            object item = e.Item;

            DataGridPageManagerBase pageManager = this.RootGroup.GetVirtualPageManager();

            // Compare cached values with current values.  If they are the same, we can clear the old values which in turn will
            // make the item non dirty.
            bool clearIsDirty = true;

            VirtualizedItemValueCollection cachedValues = pageManager.GetCachedValuesForItem(item);

            Debug.Assert(cachedValues != null);

            DataGridItemPropertyCollection itemProperties = this.ItemProperties;

            foreach (DataGridItemPropertyBase itemProperty in itemProperties)
            {
                object currentValue = itemProperty.GetValue(item);

                if (!(object.Equals(currentValue, cachedValues[itemProperty.Name])))
                {
                    clearIsDirty = false;
                    break;
                }
            }

            if (clearIsDirty)
            {
                pageManager.ClearCachedValuesForItem(item);
            }

            base.OnEditCanceled(e);
        }