@@ -37,18 +37,20 @@ protected override void OnInitialized()
3737 {
3838 Value = CountdownTime ;
3939 }
40- else if ( Mode == WatchMode . StopWatch )
41- {
42- Value = TimeSpan . FromSeconds ( 0 ) ;
43- }
4440
4541 if ( Mode == WatchMode . Watch )
4642 {
4743 SetWatchMode ( Mode ) . AndForgetExt ( ) ;
4844 Start ( ) ;
4945 }
46+ if ( Mode == WatchMode . StopWatch )
47+ {
48+ _initialValue = Value ;
49+ }
5050 }
5151
52+ TimeSpan _initialValue = new ( ) ;
53+
5254 TimeSpan _value ;
5355 [ Parameter ]
5456 public TimeSpan Value
@@ -61,6 +63,7 @@ public TimeSpan Value
6163 return ;
6264 }
6365 _value = value ;
66+ InvokeAsync ( ( ) => ValueChanged . InvokeAsync ( _value ) ) . AndForgetExt ( ) ;
6467 SetInternalValues ( ) ;
6568 }
6669 }
@@ -171,7 +174,7 @@ public WatchMode Mode
171174 /// </summary>
172175 [ Parameter ]
173176 [ Category ( CategoryTypes . FormComponent . Behavior ) ]
174- public EventCallback ValueChanged { get ; set ; }
177+ public EventCallback < TimeSpan > ValueChanged { get ; set ; }
175178
176179 /// <summary>
177180 /// Fires when countdown reach to 0.
@@ -250,7 +253,8 @@ public async void Elapse(object sender, System.Timers.ElapsedEventArgs args)
250253 else
251254 {
252255 int oldSecondValue = ( ( int ) Value . TotalSeconds ) ;
253- Value = TimeSpan . FromMilliseconds ( _stopwatch . ElapsedMilliseconds ) ;
256+ Value = _initialValue + TimeSpan . FromMilliseconds ( _stopwatch . ElapsedMilliseconds ) ;
257+
254258 }
255259#pragma warning disable CS4014
256260 if ( Wheel )
@@ -284,10 +288,14 @@ public async Task Stop()
284288 if ( Mode == WatchMode . CountDown )
285289 {
286290 Value = CountdownTime - TimeSpan . FromMilliseconds ( _stopwatch . ElapsedMilliseconds ) ;
291+ if ( Value < TimeSpan . Zero )
292+ {
293+ Value = TimeSpan . Zero ;
294+ }
287295 }
288296 else if ( Mode == WatchMode . StopWatch )
289297 {
290- Value = TimeSpan . FromMilliseconds ( _stopwatch . ElapsedMilliseconds ) ;
298+ Value = _initialValue + TimeSpan . FromMilliseconds ( _stopwatch . ElapsedMilliseconds ) ;
291299 }
292300
293301 await InvokeAsync ( StateHasChanged ) ;
@@ -310,7 +318,7 @@ public async Task Reset()
310318 else
311319 {
312320 _stopwatch . Reset ( ) ;
313- Value = TimeSpan . Zero ;
321+ Value = _initialValue ;
314322 LapRecords . Clear ( ) ;
315323 await LapRecordsChanged . InvokeAsync ( ) ;
316324 }
0 commit comments