ValidationViewModelBase を更新しました

ValidationViewModelBase を更新しました。

主な変更点は次のとおりです。

  • データ検証を行う条件を設定する属性 ValidateConditionalAttribute を追加

いま作っているプログラムで、条件によってデータ検証のオン/オフを行いたかったので機能追加したものです。属性を利用するアイデアは、以前に見た しばやんさんのブログ記事「ASP.NET MVC で条件付きの検証を行う属性とモデルバインダを実装してみた」が記憶に残っていたので利用させていただきました(ASP.NET MVC と WPF は利用環境が異なるので、属性を利用するというアイデアだけですが :mrgreen: )。

やっている内容は、しばやんさんのものと同じく、データ検証自体は行い、データ検証を行う条件が偽となる場合に当該プロパティの検証エラーをすべて削除するというものになっています。

また、今回データ検証周りの見直しも行った結果、条件付きのデータ検証の利用コードは次のようになります。

//
        private bool _isChecked;
        public bool IsChecked
        {
            get { return _isChecked; }
            set
            {
                _isChecked = value;
                base.RaisePropertyChanged(() => IsChecked);
                Num = Num;
            }
        }

        private string _num;
        // 検証条件を設定する際には、当該検証条件対象のプロパティの set アクセサ中で
        // 当該プロパティの set アクセサがに制御が渡るようにするとともに、
        // 当該プロパティの set アクセサ中では先頭で RemoveItemValidationError メソッド、
        // 最後に RaisePropertyChangedWithoutRemoveItemValidationError メソッドを記述する
        [ValidateConditional("IsChecked", true)]
        [Required(ErrorMessage = "必須項目です。")]
        [Range(0, 100, ErrorMessage = "0 から 100 までの数字を入力してください。")]
        public string Num
        {
            get { return _num; }
            set
            {
                base.RemoveItemValidationError(() => Num);
                _num = value;
                if (_num == "1")
                {
                    base.ViewModelState.AddError("Num", "1 は禁止です。");
                }
                base.RaisePropertyChanged(() => Num);
            }
        }

IsChecked プロパティが真のときに Num プロパティのデータ検証結果が表示されます。
個別のデータ検証の例を入れるために、「1 はダメ」という検証も行っています(内容に意味はありません 😉 )

ValidationViewModelBase を利用したプログラムソースも ZIP ファイルに同梱しているので、興味のある方は参考にどうぞ。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です