我有一个Grid,其中包含以秒为单位的值(即34000或2346)。
我需要能够将其转换为“1d 12h 35m”。这本身就很好但是在对网格进行排序时它将它们视为字符串,这意味着11d 23h 35m将在1d 7h 3m之前出现。
有没有办法将后面的单元格视为秒的整数?
请参阅下面的绑定代码:
ServiceClient sc = new ServiceClient();
var Result = await sc.getTeamsAsync("MyTeam");
foreach(Team row in Result)
{
double Seconds = 0;
double.TryParse(row.TimeLeft, out Seconds);
TimeSpan timeLeft = new TimeSpan(0, 0, (int)Seconds);
row.TimeLeft = (timeLeft .Days + "d " + timeLeft .Hours + "h " + timeLeft .Minutes + "m");
}
this.DataGrid.ItemsSource = Result;
结果来自服务,它们如上所述绑定到DataGrid。
答案 0 :(得分:0)
我很抱歉这个迟到的回复。
我将如何做到这一点:
我假设您可以访问“团队”类的来源? 我会把它变成一个类似的类,然后绑定到一个动态生成的字符串(在这种情况下,而不是绑定到TimeLeft我将绑定到TimeLeftText)。
我还会将TimeLeft更改为int,以便更容易处理。
public class Team : IComparable
{
private int TimeLeft { get; set; }
public string TimeLeftText
{
get
{
TimeSpan timeLeft = new TimeSpan(0, 0, TimeLeft);
return (timeLeft.Days + "d " + timeLeft.Hours + "h " + timeLeft.Minutes + "m");
}
}
public int CompareTo(object obj)
{
if (!(obj is Team))
throw new NotImplementedException();
var comparer = (Team)obj;
return TimeLeft.CompareTo(comparer.TimeLeft);
}
}
这样它将被显示为“1d 5h 47m”,但是当它被排序时,实际的秒数将相互比较,结果将更加符合逻辑。
再一次,抱歉迟到的回复。希望现在还为时已晚,并为您提供一些帮助:)