2017-03-25 13 views
0

私のモデルは、INotifyDataErrorInfoインターフェイスを実装してそのプロパティを検証していますが、正常に動作しますが、HasErrorsプロパティはデフォルトではfalseであるため、初めてアプリケーションを実行して保存(フォームは空です)ビューはエラーを発生せず、データは保存されます。ここINotifyDataErrorInfoを使用したMvvmモデルの検証

は、あなたのアプリでこの状況に対処んどのように私のviewmodelのsnipet

public LoggingViewModel() 
{ 
    _loggingCommand = new RelayCommand(checkCredentials, canExecuteLogginForm); 
    _logingModel = new LoggingModel(); 

    // I raise this event in the 'OnErrorsChanged' method in the model, 
    // so my ViewModel can subscribe and check the 'HasErrors' property. 
    _logingModel.FormIsValid += (o, e) => _loggingCommand.RaiseCanExecuteChanged(); 
} 

private bool canExecuteLogginForm() 
{ 
    return !_logingModel.HasErrors; 
} 

のですか?

詳細についてはこちらgithub reposを作成しました。

+0

デフォルトでHasErrorsがTrueになるようにコードを更新できますか?あなたのLogginModelコンストラクタでそれを検証するか強制検証しますか? – robaudas

+0

HasErrorsはINotifyDataErrorInfoインターフェイスのメンバーです。フォームにエラーがない場合はfalseを返します。どのように私は検証を強制することができますか? –

答えて

1

はもともとあなたが実際にこの状態にそれを設定し、それが必要としてtrueを返すHasErrorsプロパティのために_ errors辞書を移入するために、コンストラクタでValidateForm()メソッドを呼び出す必要が無効な状態に実際にある:

public class LoggingModel : PocoBase 
{ 
    public LoggingModel() 
    { 
     ValidateForm(); 
    } 

    [Display(Name = "Name")] 
    [MaxLength(32), MinLength(4)] 
    public string UserName 
    { 
     get { return GetValue<string>(); } 
     set { SetValue(value); } 
    } 

    [Required] 
    public string Password 
    { 
     get { return GetValue<string>(); } 
     set { SetValue(value); } 
    } 
} 
0

ViewModelのロジックは正しいです。
HasErrors = trueの場合、HasErrors = Falseを返すモデル内の検証ロジックに問題があります。

HasErrorsの設定/戻し/評価方法を見てみましょう。
プロパティ取得時にモデルを検証していますか?

public bool HasErrors 
    { 
     get 
     { 
      bool hasErrors = false; // Default true here? 

      // Validation logic ... 

      return hasErrors; 
     } 
    } 

プロパティにHasError値を格納し、別の場所に設定していますか?

public LoggingModel() 
    { 
     HasErrors = true; // Default true here? 
    } 

    public bool HasErrors { get; set; } // Gets set via validation logic 

ただ、いくつかのアイデア、私はあなたがINotifyDataErrorInfoの検証を処理する方法の構造を示すことができる場合、私はより良い答えを与えることができます言ったように。 LogginModelとして

関連する問題