/// <summary>
        /// Determines whether the specified data item is currently visible.
        /// </summary>
        /// <param name="dataItem"></param>
        /// <param name="includePartiallyVisibleItems">
        /// If this parameter is set to <c>true</c>, then the partially visible items will also be included.
        /// </param>
        public bool IsItemInViewport(object dataItem, bool includePartiallyVisibleItems = true)
        {
            if (!this.IsOperational())
            {
                return(false);
            }

            RadVirtualizingDataControlItem container = this.virtualizationStrategy.GetTopVisibleContainer();
            int    iterationStart     = container.associatedDataItem.Index - this.firstItemCache.associatedDataItem.Index;
            double bottomViewportEdge = this.virtualizationStrategy.ViewportLength;

            for (int i = iterationStart; i < this.realizedItems.Count; i++)
            {
                container = this.realizedItems[i];
                var itemTop = this.virtualizationStrategy.GetItemRelativeOffset(container);
                if (itemTop < bottomViewportEdge)
                {
                    if (!includePartiallyVisibleItems && (itemTop < 0 || itemTop + virtualizationStrategy.GetItemLength(container) > bottomViewportEdge))
                    {
                        continue;
                    }

                    if (dataItem.Equals(container.associatedDataItem.Value) && container.Visibility == Visibility.Visible)
                    {
                        return(true);
                    }
                }
                else
                {
                    break;
                }
            }

            return(false);
        }