在 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));
我使用 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));