Разобрать string
на две части, альфа-часть и числовую часть.Поместите числовую часть в int
, а затем сравнивайте часть int только тогда, когда альфа-часть является связью.
public int Compare(string left, string right) {
string leftAlpha;
int leftNum;
string rightAlpha;
int rightNum;
GetParts(left, out leftAlpha, out leftNum);
GetParts(right, out rightAlpha, out rightNum);
if (leftAlpha != rightAlpha) {
return String.Compare(leftAlpha, rightAlpha);
}
else {
return leftNum.CompareTo(rightNum);
}
}
private void GetParts(string str, out string alpha, out string num) {
alpha = str.Substring(0, 1);
string numStr = str.Substring(1);
num = Int32.Parse(numStr);
}
Если вы можете найти способ выставить эти две части как свойствав классе вам лучше всего использовать CollectionView для привязки.Где SourceCollection
- это ваш ObservableCollection
, а затем добавьте SortDescriptions
, которые соответствуют свойствам класса.Это может быть излишним, но имеет много преимуществ, таких как вставка новых элементов прямо в правильное положение.Вам вообще не придется явно сортировать коллекции.