Причина, по которой он не работает, заключается в том, что он сортирует по значению свойства SortColumn, и все объекты в вашей коллекции имеют одинаковое значение для этого. Один из способов ее решения - использовать отражение, чтобы получить значение свойства, названного свойством SortColumn.
public Int32 CompareTo( object next )
{
SessionInfo nextCase = next as SessionInfo;
var sortProperty = this.GetType().GetProperty( this.SortColumn );
var currentValue = sortProperty.GetValue( this ) as IComparable;
var nextValue = sortProperty.GetValue( next ) as IComparable;
return currentValue.CompareTo( nextValue );
}
Я упустил проверки недействительности, чтобы упростить пример, но вам нужно будет рассмотреть, что произойдет, если свойства несопоставимы, значения будут нулевыми и т. Д.
Лучшим решением было бы использовать общий список и расширение OrderBy. Тогда вы можете просто сделать:
var sorted = collection.OrderBy( c => c.Duration );
или
var sorted = collection.OrderBy( c => c.Name );
Если вы используете Dynamic LINQ , то вы можете указать столбец по имени.
var sorted = collection.OrderBy( "Duration" );