2010-01-24 59 views
2

在WPF中使用IDataErrorInfo时,有一种将参数传递给验证器的方法。例如,我有一个DueDate Datepicker。在验证新任务时,我希望限制今天或以后允许的日期,但是在编辑时,由于可以编辑已过期的任务,因此需要在今天之前允许DueDates。如何从Xaml中设置IDataErrorInfo验证器中的属性

我在XAML的DatePicker(.NET 4.0)

<DatePicker SelectedDate="{Binding Path=SelectedIssue.IssDueDate, 
      ValidatesOnDataErrors=True}" /> 

我IErrorDataInfo

namespace OITaskManager.Model 
{ 
    public partial class Issue : IDataErrorInfo 
    { 
    // I want to set these values from the Xaml 
    public DateTime minDate = new DateTime(2009, 1, 1); 
    public DateTime maxDate = new DateTime(2025, 12, 31); 

    public string this[string columnName] 
    { 
     get 
     { 
      if (columnName == "IssDueDate") 
      { 
       if (IssDueDate < minDate || IssDueDate > maxDate) 
       { 
        return "Due Date must be later than " + minDate.Date + 
          " and earlier than " + maxDate.Date;      
       } 
       return null; 
      } 
      return null; 
     } 
    } 

回答

2

你可以只使用该绑定向custom validator。或者你可以在Issue对象实例上维护一个IsNew内部状态,直到它不再被认为是新的。

+1

为什么总是有7种方法可以做任何事情?我在这方面做了一些研究,看起来这会起作用。我的模型是Linq to SQL数据集,我已经添加了带有填充IDataErrorInfo的验证规则的部分类。如果我为日期使用自定义验证程序,则应该保留IDataErrorInfo验证,或者只应将检查程序添加到自定义日期验证程序以确保Min和Max日期不在允许的范围之外。后者似乎最简单,但在两个地方进行数据库验证感觉像是一种糟糕的形式。 – 2010-01-25 15:17:21

相关问题