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″)。
- Time1 + Time2 の TimeSpan を既定の
サンプル実行結果
