private void Sort()
{
var list = _children.Cast<TreeViewModelBase>().ToList();
list.Sort((x, y) =>
{
if (x is StoreCategorizeTreeViewModel)
{
if (y is StoreCategorizeTreeViewModel)
{
var vx = ((StoreCategorizeTreeViewModel)x).Value;
var vy = ((StoreCategorizeTreeViewModel)y).Value;
int c = vx.Name.CompareTo(vy.Name);
if (c != 0) return c;
c = vx.StoreTreeItems.Count.CompareTo(vy.StoreTreeItems.Count);
if (c != 0) return c;
c = vx.GetHashCode().CompareTo(vy.GetHashCode());
if (c != 0) return c;
}
else if (y is StoreTreeViewModel)
{
return -1;
}
}
else if (x is StoreTreeViewModel)
{
if (y is StoreTreeViewModel)
{
var vx = ((StoreTreeViewModel)x).Value;
var vy = ((StoreTreeViewModel)y).Value;
int c = vx.Signature.CompareTo(vy.Signature);
if (c != 0) return c;
c = vx.Boxes.Count.CompareTo(vy.Boxes.Count);
if (c != 0) return c;
c = vx.GetHashCode().CompareTo(vy.GetHashCode());
if (c != 0) return c;
}
else if (y is StoreCategorizeTreeViewModel)
{
return 1;
}
}
return 0;
});
for (int i = 0; i < list.Count; i++)
{
var o = _children.IndexOf(list[i]);
if (i != o) _children.Move(o, i);
}
}