2010-11-25 5 views
4

Im DataAnnotationを使用して入力コントロールを検証します。しかし、ValidatesOnExceptionsは、ユーザーがテキストボックスに何かを入力してTabキーを押すと機能します。 (基本的にはLostfocusイベント)。Silverlightのボタンをクリックすると入力を検証する方法は?

ただし、ユーザーがテキストボックスに何も入力しない場合は、[送信]をクリックします。それは動作しません。 ASP.NET Page.IsValidプロパティと同様に、SilverlightにはUIのすべてのコントロールを検証するためのプロパティまたはメソッドがありますか?

答えて

0

私は、ページに表示されているすべてのUserControlsを検証する方法があるとは思わない。しかし、私はINotifyDataErrorInfoを見ることをお勧めします。これは、私の意見では、Silverlightでデータを検証する最善の方法です。 INotifyDataErrorInfoアプローチでは、ビュー(ValidatesOnExceptionなど)を変更する必要はなく、WebServiceに対して容易に検証できます(これはデータアノテーションでは不可能です)。

はこちらをご覧:http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2009/11/18/silverlight-4-rough-notes-binding-with-inotifydataerrorinfo.aspx

希望これはあなたを助けます。

+0

INotifyDataErrorInfoは確かにSilverlight MVVM検証のアプローチですが、ボタンクリック時の検証コントロールの問題は解決しません –

1

Terenceから提供されたURLの助けを借りて、以下の解決策を用意しました。 サービスコールの前にすべてのプロパティが設定されていることを確認できます。

public class PersonViewModel : EntityBase 
{ 
    private readonly RelayCommand saveCommand; 

    public PersonViewModel(IServiceAgent serviceAgent) 
    { 
     saveCommand = new RelayCommand(Save) { IsEnabled = true }; 
    } 

    public RelayCommand SaveCommand // Binded with SaveButton 
    { 
     get { return saveCommand; } 
    } 

    public String Name // Binded with NameTextBox 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
      PropertyChangedHandler("Name");     
      ValidateName("Name", value); 
     } 
    } 

    public Int32 Age // Binded with AgeTextBox 
    { 
     get 
     { 
      return age; 
     } 
     set 
     { 
      age = value; 
      PropertyChangedHandler("Age"); 
      ValidateAge("Age", value); 
     } 
    } 

    private void ValidateName(string propertyName, String value) 
    { 
     ClearErrorFromProperty(propertyName); 
     if (/*SOME CONDITION*/)  
      AddErrorForProperty(propertyName, "/*NAME ERROR MESSAGE*/");   
    } 

    private void ValidateAge(string propertyName, Int32 value) 
    { 
     ClearErrorFromProperty(propertyName); 
     if (/*SOME CONDITION*/)  
      AddErrorForProperty(propertyName, "/*AGE ERROR MESSAGE*/");    
    } 

    public void Save() 
    { 
     ValidateName("Name", name); 
     ValidateAge("Age", age);   
     if (!HasErrors) 
     {     
      //SAVE CALL TO SERVICE 
     } 
    }  
} 
関連する問題