【发布时间】:2011-10-30 14:45:30
【问题描述】:
我有两个日期字段:StartDate 和 EndDate。 StartDate 必须早于 EndDate。
如果用户将 StartDate 更改为大于 EndDate 的值,则该 DatePicker 周围会出现一个红色边框,反之亦然。如果用户更改了第二个框以使日期范围现在正确,则第一个框仍然存在验证错误。
当其中任何一个日期字段发生更改时,我如何验证这两个日期字段?
我正在使用IDataErrorInfo
public string GetValidationError(string propertyName)
{
switch (propertyName)
{
case "StartDate":
if (StartDate > EndDate)
s = "Start Date cannot be later than End Date";
break;
case "EndDate":
if (StartDate > EndDate)
s = "End Date cannot be earlier than Start Date";
break;
}
return s;
}
我不能简单地引发 PropertyChange 事件,因为当它们中的任何一个发生更改时我需要验证这两个字段,因此让它们都为另一个引发 PropertyChange 事件将陷入无限循环。
如果其他日期返回验证错误,我也不喜欢清除日期字段的想法。
【问题讨论】:
-
只是为了提出另一种方法,当任一规则被破坏时,您可以将两个框都设为红色吗?如果是这样,您只需要引发一个 propertychanged 事件。
-
@Josh 很乐意,但我不知道如何手动引发单个属性的验证事件
-
我退出使用验证事件。我对他们有太多的问题,我认为他们应该开火但他们不开火,或者他们开火但边界没有突出显示。我使用绑定到有效布尔表示的红色边框样式。我还将工具提示绑定到消息属性。然后,当值更改时,我会对其进行验证并适当地设置属性。
-
@Josh 这是否意味着您要验证的类中的每个属性都需要
PropertyIsValid和PropertyErrorMessage?是这样,还是您的验证发生在整个类而不是单个属性上? -
在 GetValidationError 方法中提高 PropertyChanged 将陷入无限循环。但是在开始和结束日期的设置器上提高属性更改可能会解决您的问题...
标签: wpf validation idataerrorinfo