Xceed WPF Toolkit'ten iki DateTimePickers alıyorum ve MahApps Metro kullanın, doğrulama hata şablonu default one provided by Metro ({DynamicResource ValidationErrorTemplate}
) 'dir. doğrulama ile ele alınır doğrulama böyle bağlıyor:Validation.ErrorTemplate yalnızca en az bir kez hata göründüğünde görünür
[TimeSpanValidator]
public TimeSpan StartTime
{
get { ... }
set { ... }
}
[TimeSpanValidator]
public TimeSpan EndTime
{
get { ... }
set { ... }
}
başvurulan doğrulayıcı sınıfı: Bu ince sürece pencereyi açarken bir hata yok gibi çalışır
public class TimeSpanValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
EditEntryViewModel viewmodel = validationContext.ObjectInstance as EditEntryViewModel;
if (viewmodel == null)
{
Debug.Fail("Error in validation: ViewModel was not assigned.");
return ValidationResult.Success;
}
if (!viewmodel.ValidTimeSpan)
return new ValidationResult("End time must not be earlier than start time.");
if (!viewmodel.TimeSpanUnoccupied)
return new ValidationResult("The timespan overlaps with an existing entry.");
return ValidationResult.Success;
}
}
. Ama zaten sahip olduğum zaman (benim durumumda, önceden doldurulmuş zamanlar varolan biriyle çakışan bir zaman aralığı oluşturur) hata şablonu hiç gösterilmiyor, en azından değerinden başka bir geçersiz değere geçtiğimde bile geçerli bir kez.
Hata ayıklayıcısını kullanarak doğrulayıcıya adım attım, bir hata olduğunda her zaman geçersiz bir sonuç döndürüyor. Ayrıca, değerler geçersiz olduğunda iletişim kutusunu kapatamıyorum, ValidTimeSpan
ve TimeSpanUnoccupied
doğru çalışıyor. Yani gerçekten sadece yanlış giden hata şablonunun görüntülenmesi. Ve neden hiç bir fikrim yok. Ayrıca, bu yalnızca hata şablonuyla oluşur. Ben Validation.HasError
bir ipucu bağladığınızda amaçlanan gibi ipucu, hata zaten var olsa bile penceresi açıldığında gösterir: Neyi yanlış yapıyorum
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
? Bir şey mi kaçırdım?