XAML自定义时间格式

时间:2015-08-14 16:48:04

标签: xaml grid windows-10

我有一个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。

1 个答案:

答案 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”,但是当它被排序时,实际的秒数将相互比较,结果将更加符合逻辑。

再一次,抱歉迟到的回复。希望现在还为时已晚,并为您提供一些帮助:)