public override int Compare(int xDataIndex, int yDataIndex)
        {
            ListSortDirection lastSortDirection = ListSortDirection.Ascending;

            if (m_sortDescriptionInfos != null)
            {
                int result = 0;
                int count  = m_sortDescriptionInfos.Length;

                for (int i = 0; i < count; i++)
                {
                    SortDescriptionInfo sortDescriptionInfo = m_sortDescriptionInfos[i];

                    lastSortDirection = sortDescriptionInfo.SortDirection;

                    if (sortDescriptionInfo.Property == null)
                    {
                        continue;
                    }

                    IComparer sortComparer = sortDescriptionInfo.SortComparer;
                    DataStore dataStore    = sortDescriptionInfo.DataStore;

                    if (sortComparer != null)
                    {
                        result = sortComparer.Compare(dataStore.GetData(xDataIndex), dataStore.GetData(yDataIndex));
                    }
                    else
                    {
                        result = dataStore.Compare(xDataIndex, yDataIndex);
                    }

                    if (result != 0)
                    {
                        if (lastSortDirection == ListSortDirection.Descending)
                        {
                            result = -result;
                        }

                        return(result);
                    }
                }
            }

            if (lastSortDirection == ListSortDirection.Descending)
            {
                return(yDataIndex - xDataIndex);
            }

            return(xDataIndex - yDataIndex);
        }
        public bool IsReverseOf(SortDescriptionInfo sortDescriptionInfo)
        {
            if (sortDescriptionInfo.m_property == m_property)
            {
                switch (sortDescriptionInfo.m_direction)
                {
                case ListSortDirection.Ascending:
                    return(m_direction == ListSortDirection.Descending);

                case ListSortDirection.Descending:
                    return(m_direction == ListSortDirection.Ascending);
                }
            }

            return(false);
        }
        public override bool Equals(object obj)
        {
            SortDescriptionInfo sortDescriptionInfo = obj as SortDescriptionInfo;

            if (sortDescriptionInfo == null)
            {
                return(false);
            }

            if ((sortDescriptionInfo.m_direction == m_direction) &&
                (sortDescriptionInfo.m_property == m_property))
            {
                return(true);
            }

            return(false);
        }