在 WPF 中按月份名称对 ObservableCollection 值进行排序

Sort ObservableCollection values by month name in WPF

我使用 WPF,我有一个 Observablecollection<MyObj>,我的对象 class 是:

MyObject
{
string happenAtMonth;
int value;
}

happendAtMonth 是月份的名称。我的 observableCollection (MyObColl) 将具有这些值,例如:

MyObColl.Add(new MyObj("October", 3));
MyObColl.Add(new MyObj("January", 450));
MyObColl.Add(new MyObj("June", 15));
MyObColl.Add(new MyObj("Febraury", 125));

我需要按月对这个 MyObColl 进行排序输出应该是这样的:

Value was 450 in January
Value was 125 in Febraury
Value was 15 in June
Value was 3 in October

我将如何实现这一点并按月份名称对 ObservableCollection 进行排序? 谢谢

您需要提供月份字符串与其索引之间的联系。例如:

var months = new Dictionary<string, int>()
{
  {"January", 0},
  {"February", 1}
  //...
};
MyObjColl.OrderBy(x => months[x.happenAtMonth]);

或者更好的方法可能是定义一个枚举:

public enum Month
{
  January = 1,
  February = 2,
  //...
}

并将对象的定义更改为:

public class MyObject
{
  public Month HappenAtMonth { get; set; }
  public int Value { get; set; }
}

然后:

MyObjColl.OrderBy(x => x.HappenAtMonth);

这会将字符串格式的月份解析为其整数值并对其进行排序:

var values = MyObColl.OrderBy( o => DateTime.ParseExact( o.Month , "MMMM" , CultureInfo.InvariantCulture ).Month )
    .Select( o => $"Value was {o.Value} in {o.Month}" );

foreach ( var value in values )
    Console.WriteLine( value );

试试这个:

MyObjColl= new ObservableCollection<DataConcept>(MyObjColl.OrderBy(i => i.HappenAtMonth));