XamDataGrid 上で TimeSpan 型の値をバインドすると、24時間を超える場合に「日.時:分:秒」(例: 30時間→”1.06:00:00″)形式で表示されます。本記事では、長時間データを「総時間:分:秒(HH:mm:ss)」形式で正しく表示する方法を解説します。

実装のポイント

ValueToDisplayTextConverter プロパティを利用します。

こちらはドキュメントにもあるとおり、表示テキストと値の間の変換で使用されるコンバーターを指定します。

サンプルの要点

TotalHoursTimeSpanConverter を実装し、累計時間を文字列化します。

Converter のコード

internal class TotalHoursTimeSpanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is TimeSpan ts)
        {
            // 総時間を取得(例:30時間の場合は30)
            int totalHours = (int)ts.TotalHours;
            return $"{totalHours:D2}:{ts.Minutes:D2}:{ts.Seconds:D2}";
        }
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // 一方向バインディングの場合は実装不要
        throw new NotImplementedException();
    }
}

サンプルプロジェクトの列

  • Time1
    • 最初の時間データ(例: 作業フェーズ1の所要時間)
  • Time2
    • 続く時間データ(例: 作業フェーズ2の所要時間)
  • 合計時間 (TotalTime)
    • Time1 + Time2 の累計時間を表示
  • Standard Time
    • Time1 + Time2 の TimeSpan を既定の ToString() で表示(例: 1日と6時間の場合は “1.06:00:00″)。

サンプル実行結果

Tagged:

製品について

Ultimate UI for WPF