2012-03-08 163 views
6

我需要開發一個應用程序的Windows Phone 7. 由於顯而易見的原因,我必須驗證我的表單。表單驗證

我通常在WPF中編程,並使用ValidationRule的原則。但我無法在windows phone 7中找到相同的原理。

因此我的問題是,如何創建表單驗證。

+0

我會宣傳我的驗證實施:http://vortexwolf.wordpress.com/2012/03/10/windows-phone-7-validation。我認爲比互聯網上的其他實現更容易使用。 – vorrtex 2012-03-09 22:50:41

回答

4

Windows Phone不支持開箱即用的表單驗證。

這是一個blog post,它描述瞭如何滾動自定義控件來實現驗證規則。

我將在我自己的應用程序中處理這個問題的方法是將驗證邏輯放入我的模型類中,並在該模型上創建一個IsValid屬性。模型類也會有一個Error屬性,並帶有描述驗證問題的錯誤消息。我的UI層會調用myModel.IsValid,並在出現錯誤時顯示錯誤消息。

+0

thx,我希望微軟已經實施了一種方法 – David 2012-03-08 14:39:14

0

我複製了與在桌面上使用Silverlight相同的方法:INotifyDataErrorInfo接口。

Here我對它進行了更具體的描述,here可以下載示例項目的源代碼。

的simpliest例子看起來如此:

View.xaml

<TextBox Text="{Binding SomeProperty, Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" 
     Style="{StaticResource ValidationTextBoxStyle}" /> 

View.xaml.cs

public MainPage() 
{ 
    InitializeComponent(); 
    this.BindingValidationError += MainPage_BindingValidationError; 
} 

private void MainPage_BindingValidationError(object sender, ValidationErrorEventArgs e) 
{ 
    var state = e.Action == ValidationErrorEventAction.Added ? "Invalid" : "Valid"; 

    VisualStateManager.GoToState((Control)e.OriginalSource, state, false); 
} 

ViewModel.cs

public class MainViewModel : ValidationViewModel 
{ 
    public MainViewModel() 
    { 
     this.Validator.AddValidationFor(() => this.SomeProperty).NotEmpty().Show("Enter a value"); 
    } 

    private string someProperty; 

    public string SomeProperty 
    { 
     get { return someProperty; } 
     set 
     { 
      someProperty = value; 
      RaisePropertyChanged("SomeProperty"); 
     } 
    } 
} 

它依賴於大量的補充類,但同時你自己寫的代碼很少。