如何使用已启用/禁用的按钮WPF迫使时间板依赖



我有一个timespan textbox,我的objectif是在timespan的形式错误时禁用按钮保存(EXP 90:00:00)..

我尝试一个代码,它仅一次是正确的。如果我设置20:10:00 ..启用了保存按钮(正确)。在那之后,timespan是错误的55:00:00,启用了按钮(数据库中的节省为00:00:00)

XAML:

 <TextBox Name="txtTime"  Margin="10,10,10,10" >
                <TextBox.Text >
                    <Binding Path="Time" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" Mode="TwoWay" >
                        <Binding.ValidationRules>
                            <local:DateTimeValidationRule ValidationStep="RawProposedValue"/>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>

ViewModel:

public bool  VarTIME ;

  [Required(ErrorMessage = "Time is required")]
    public TimeSpan Time
    {
        get { return time; }
        set
        {
            time = value;
            intervalString = Time.ToString();
            TimeSpan reded;
            bool success = TimeSpan.TryParseExact(intervalString, "hh\:mm\:ss",
                           CultureInfo.InvariantCulture, out reded);
            if (success)
            {
                VarTIME = true;
            }
            OnPropertyChanged("Time");
        }
    }

    public SheduleTrainViewModel()
    {
        VarTIME = false;
        addTrain = new RelayCommand<string>(AddTrainFunction, canAddTrain);
        private bool canAddTrain(string obj)
         {     return VarTIME;     
         }
    }

VelidationResult类:

 public class DateTimeValidationRule: ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        string time;
        Regex regex;
        if (value == null)
            return new ValidationResult(true, null);
        else
            time = value.ToString();
        regex = new Regex(@"^([0-1]?d|2[0-3])(?::([0-5]?d))?(?::([0-5]?d))?$");
        if (regex.IsMatch(time.ToString()))
            return new ValidationResult(true, null);
        return new ValidationResult(false, "The time must match this format hh:mm:ss / hh:mm");
    }
}

我如何将其修复以使其工作始终正确?谢谢,

您无法将TimeSpan属性设置为有效的TimeSpan值以外的任何内容,因此在源属性的设置中进行验证是毫无意义的。

value is 始终有效的时间pan。

您应该在ValidationRule中执行验证:

public class DateTimeValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        TimeSpan reded;
        if(!TimeSpan.TryParseExact(value.ToString(), "hh\:mm\:ss", CultureInfo.InvariantCulture, out reded))
            return new ValidationResult(false, "Invalid time!");
        return ValidationResult.ValidResult;
    }
}

此验证失败,TextBox将获得一个红色边框(使用默认验证。ERRORTEMPLATE),该边框表明该值无法转换为TimeSpan,并且不会设置属性。

最新更新