Xceed WPF ToolkitのDateTimePickersが2つあり、MahApps Metroを使用すると、検証エラーテンプレートはdefault one provided by Metro({DynamicResource ValidationErrorTemplate}
)です。Validation.ErrorTemplateは、少なくとも1回エラーが発生していない場合にのみ表示されます。
[TimeSpanValidator]
public TimeSpan StartTime
{
get { ... }
set { ... }
}
[TimeSpanValidator]
public TimeSpan EndTime
{
get { ... }
set { ... }
}
参照バリデータクラス:
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;
}
}
これは、限りウィンドウを開くときに、私はエラーを持っていないと正常に動作検証は、検証は次のように属性を処理されます。しかし、私が既に持っている場合(私の場合は、あらかじめ設定された時間が既存のものと重なるタイムパンを作成する)、エラーテンプレートは、値を別の無効なものに変更しても、全く表示されません。一度有効な入力。
私はデバッガでバリデータをステップ実行しましたが、エラーが発生したときは常に無効な結果を返します。また、値が無効な場合、ダイアログボックスを閉じることができません。ValidTimeSpan
とTimeSpanUnoccupied
が正しく動作しています。実際には間違ったエラーテンプレートが表示されるだけです。そして私は理由を知りません。
また、これはエラーテンプレートでのみ発生します。私はValidation.HasError
にツールチップをバインドするときには、ウィンドウが開いたときにエラーが既に存在する場合でも、意図したようにツールチップが表示されます。
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
私が間違って何をしているのですか?私は何か見落としてますか?