In this case it looks like it's failing because you're not setting VarTIME back to false on a failure. This should fix it:
public TimeSpan Time
{
get { return time; }
set
{
time = value;
intervalString = Time.ToString();
TimeSpan reded;
VarTIME = TimeSpan.TryParseExact(intervalString, "hh\\:mm\\:ss",
CultureInfo.InvariantCulture, out reded);
OnPropertyChanged("Time");
}
}
That being said, I think there are a lot better approaches... The setter method here a call back to the property, it's parsing data that doesn't get set back to the backer, it's setting other variables...
Also I think you may have missed that TimeSpan is a struct so it will always have a value, therefore required isn't going to work here. Additionally for input purposes the default value of 0.00:00:00 may be valid.
If you want to make sure that the time is less than a day, use a required maximum attribute. When converting this to the DB model you can just truncate the fractional seconds if you don't want them.
For just making sure it's valid, a simple approach I would use is a TimeSpan? converter and return null if the format isn't as expected. Then change your command to take a TimeSpan? and return false if null.
For a more elegant solution I'd look at some of the examples for validation here:
WPF TextBox Validation C# - Stack Overflow[
^]