2012-03-08 36 views
6

Tôi cần phát triển một cửa sổ ứng dụng điện thoại 7. Và vì lý do hiển nhiên, tôi phải xác thực biểu mẫu của mình.Xác thực mẫu

Tôi thường lập trình trong WPF và sử dụng nguyên tắc ValidationRule. Nhưng tôi không thể tìm thấy nguyên tắc tương tự trong windows phone 7.

Do đó câu hỏi của tôi, cách tạo xác nhận biểu mẫu.

+0

Tôi sẽ quảng cáo việc triển khai xác thực của mình: http://vortexwolf.wordpress.com/2012/03/10/windows-phone-7-validation. Tôi nghĩ rằng nó dễ sử dụng hơn so với các triển khai khác trên internet. – vorrtex

Trả lời

4

Windows Phone không hỗ trợ xác thực biểu mẫu ra khỏi hộp.

Đây là một số blog post mô tả cách cuộn điều khiển tùy chỉnh để triển khai quy tắc xác thực.

Cách tôi xử lý điều này trong một trong các ứng dụng của riêng tôi là đặt logic xác thực trong lớp mô hình của tôi và tạo thuộc tính IsValid trên mô hình. Lớp mô hình cũng sẽ có thuộc tính Error với thông báo lỗi mô tả vấn đề xác thực. Lớp giao diện người dùng của tôi sẽ gọi myModel.IsValid và hiển thị thông báo lỗi nếu có sự cố.

+0

thx, tôi hy vọng một phương pháp đã được Microsoft triển khai – David

0

Tôi đã sao chép cùng một phương pháp mà tôi đã sử dụng với Silverlight trên máy tính để bàn: giao diện INotifyDataErrorInfo.

Here Tôi đã mô tả cụ thể hơn và here bạn có thể tải xuống mã nguồn của dự án mẫu.

Ví dụ đơn giản nhất trông như vậy:

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"); 
     } 
    } 
} 

Nó dựa trên rất nhiều lớp bổ sung, nhưng đồng thời có rất ít mã mà bạn sẽ tự viết.

Các vấn đề liên quan