0

コードビハインドから検証を実行する問題が発生しています。私のデータはデータグリッドに表示されます。列(タイプ)の1つはドロップダウンであり、ドロップダウンメニューが変更されると、コードビハインドで処理されるDropDownClosedイベントがトリガーされます。

私が達成しようとしているのは、次の列の内容を検証して、ドロップダウンで新しく選択したタイプと一致させることです。一致しない場合は、検証エラーをグリッドに表示したいと思います。INotifyDataErrorInfoインターフェイスを使用して検証を実装しましたが、コードビハインドで使用する場合を除いて、非常にうまく機能します。コードビハインドが検証を呼び出すと、データグリッドのValidationSummaryが更新されることはありません。私がここで間違っていること??? デバッガーを使用すると、インターフェイスのエラー辞書に追加されているエラーをはっきりと確認できます...

ハンドラーは次のとおりです。

        private void TypeBoxChanged(object sender, EventArgs e)
        {
        ComboBox box = (sender as ComboBox);
        IncomingPolicy row = (IncomingPolicy)box.DataContext;

        string ruleTypeValue = TypeList.GetKeyForText(box.SelectedItem.ToString());
        //check if the type is the same
        if(row.TypeWrapper == ruleTypeValue)
            return;
        if (row.ValidateRule(ruleTypeValue))
        {
            //SAVE the record
        }
        else
        {
            row.RaiseErrorsChanged("RuleWrapper");
        }
    }

ルールの検証メソッドは、ruletypevalueに基づいてこのメソッドを呼び出します

        public bool ValidateRegularExpression(string property, string value, string expression, string errorMessage)
        {
        bool isValid = true;
        Regex regex = new Regex(expression);
        Match match = regex.Match(value);
        if (match.Success)
        {
            RemoveError(property, errorMessage);                
        }
        else
        {
            AddError(property, errorMessage, false);
            isValid = false;
        }

        return isValid;
    }

MSDNのサンプル実装に従いましたhttp://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo%28VS.95%29.aspx

4

1 に答える 1

4

少し前に、検証ヘルパーを実装し、両方のインターフェイスIDataErrorInfoINotifyDataErrorInfo:のサンプルソリューションを作成しました。

http://vortexwolf.wordpress.com/2011/10/01/wpf-validation-with-idataerrorinfo/

ソースコード

主な実装は次のとおりです。

this.PropertyChanged += (s, e) => 
{
    // if the changed property is one of the properties which require validation
    if (this._validator.PropertyNames.Contains(e.PropertyName))
    {
        this._validator.ValidateProperty(e.PropertyName);
        OnErrorsChanged(e.PropertyName);
    }
}

OnErrorsChanged検証の成功に関係なく、常に(またはあなたの場合は)メソッドを呼び出す必要がありRaiseErrorsChangedます。プロパティが無効な場合は赤い境界線が表示され、有効な場合はバインドされたコントロールが通常の状態に戻ります。

于 2012-03-13T12:46:21.467 に答える