在WPF

2011-12-05 41 views
0

驗證兩個屬性我有這樣的屬性的類:在WPF

public DateTime Start { get; set; } 
    public DateTime Finish { get; set; } 

而這樣的視圖模型:

<StackPanel> 
     <DatePicker SelectedDate="{Binding Start}" /> 
     <DatePicker SelectedDate="{Binding Finish}" /> 
    </StackPanel> 

我想啓用驗證。所以,當開始>完成時,必須有錯誤。提供這種驗證的最簡單方法是什麼?

回答

3

好吧,我發現答案自己)我伸出我的TIMERANGE類實現IDataErrorInfo的界面是這樣的:

public class TimeRange : IDataErrorInfo 
{ 
    public DateTime Start { get; set; } 
    public DateTime Finish { get; set; } 


    #region IDataErrorInfo Members 

    public string Error 
    { 
     get { throw new NotImplementedException(); } 
    } 

    private bool _IsValid() 
    { 
     return Finish > Start; 
    } 

    public string this[string columnName] 
    { 
     get 
     { 
      string result = null; 
      if (columnName == "Start" && !_IsValid()) 
       result = "Start must occure before Finish!"; 
      else if (columnName == "Finish" && !_IsValid()) 
       result = "Finish must occure after Start!"; 
      return result; 
     } 
    } 

    #endregion 
} 

,然後改變我的XAML代碼:

 <DatePicker SelectedDate="{Binding Start, UpdateSourceTrigger=LostFocus, 
      ValidatesOnDataErrors=true, NotifyOnValidationError=true}" /> 
     <DatePicker SelectedDate="{Binding Finish, UpdateSourceTrigger=LostFocus, 
      ValidatesOnDataErrors=true, NotifyOnValidationError=true}" /> 
2

您可以使用Binding.ValidationRules

你可以找到一個MSDN示例here

+1

此方法僅驗證一個值。我的驗證需要比較兩個屬性。 – Seekeer

+0

將從DependencyObject繼承的屬性添加到您的驗證類。向DependencyObject添加一個DependencyProperty。在DependencyProperty上使用數據綁定,並且您可以驗證它是否比較兩個屬性。 –

+1

@Seekeer,這是一個很好的解決方案,雖然沒有很好的解釋。看看我的博客文章* [將數據綁定,驗證和MVVM提升到新的水平 - 第1部分](http://techfilth.blogspot.com/2011/07/taking-databinding-validation-and-mvvm.html )*,你可以用它來開始,並將它擴展成相當強大的東西。 – slugster

-2

比較得到的值。如果開始>完成返回null或其他。