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 を既定の
サンプル実行結果
