問題タブ [validationrules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4928 参照

wpf - 複数の(失敗した)ValidationRulesを持つBindingGroup

私は今日仕事で問題に遭遇しました。そこでは、同時に失敗しBindingGroupている複数のがあります。ValidationRule問題は、エラーがあるかどうかを判断しようとすると(つまり、コマンドのをに設定するために) ArgumentException、withingからバブリングが発生することです。BindingGroup.ValidateWithoutUpdateCanExecutefalse

私はそれを次の例に蒸留することができました(申し訳ありませんが、それでも複数のソースにまたがっていますが、新しいWPFプロジェクトにコピー/貼り付けできる必要があるすべての関連部分を同封しました):

Window1.xaml:

Window1.xaml.cs:

Person.cs:

TestRule1.cs:

TestRule2.cs:

基本的に、私の問題は、TestRule1TestRule2 fail, I get anArgumentException bubbling up when I callthis.BindingGroup.ValidateWithoutUpdate()with message "Cannot have duplicates in this Collection", parameter name: "validationError". I dug around through the implementation ofBindingGroup , and it seems that it is using itself as the second parameter toValidationErrorbindingInErrorValidationErrorCollection`, which is theの両方parameter, which the underlyingが一意である必要がある場合です。

確かに、この例は考案されたものですが、そうではない私の現実の問題を完全に示しています。(私には2つの完全に独立したValidationRule、同じビジネスオブジェクトの異なる属性を操作しているものがあり、これらを1つにまとめても意味がありませんValidationRule)。さらに、私が見つけることができるすべての例BindingGroupは、単一の使用を示していますValidationRuleが、構造は、一度に1つだけが失敗する限り、明らかに複数のルールをサポートし、受け入れます。

私は何か間違ったことをしているのでしょうか、それともBindingGroup私が現在考えているように、これは実装のバグのように見えますか?

その価値については、.Net3.5SP1でVS2008を使用しています。

0 投票する
3 に答える
3831 参照

asp.net-mvc - DataAnnotations[必須]属性によって例外がスローされることはありません

Asp.NET MVCアプリケーションがあり、データ注釈を使用していくつかのフィールドに検証を追加しています。

しかし、これは私が期待したようには機能しないようです。基本的に、ページに手動でチェックして新しいRuleViolation()をスローする他のエラーが含まれている場合、必要な違反は検証の概要に表示されます。必要な違反が唯一のエラーである場合、それは表示されません。

私のコントローラーには次のコードが含まれています。

しかし、必要な違反がスローされていないことを考えると、私はここに入ることがありません。

DataAnnotation違反によって発生したエラーをトラップするために、私が知らないことをする必要がありますか?

助けてくれてありがとう

編集:

コントローラのアクションは次のとおりです。

更新はどこにありますか:

編集:dataannotationsを使用して期待どおりに機能および検証する最終的なコード。マーレに感謝します。

0 投票する
1 に答える
961 参照

wpf - 検証ルールの問題

エラーを返すための検証ルールを取得しようとしています。モデルにIDataErrorInfoを実装しました。これには、検証が失敗した場合に返されるビジネスオブジェクトのプロパティとメッセージが含まれています。検証ルールも作成しました。問題は、検証ルールが実行されている(ブックマークされている)が、モデルのIDataErrorInfo実装がエラーを生成したとしても、ルール内のIDataErrorInfo参照にエラーが発生することはないということです。データグリッドは、検証に失敗したことを明確に示しています。

ルールとモデルに2つの異なるメッセージを返すようにしてテストしましたが、モデルのバージョンは常に返されます。これは、私のルールがIDataErrorInfoオブジェクトの内容を認識できない、または単にその新しいインスタンスを作成しているようなものです。

DataGrid:

検証ルール:

オブジェクト「idei」はnullではありませんが、idei.Errorは常に長さがゼロの文字列( "")です。

モデル/ビジネスオブジェクト

0 投票する
2 に答える
338 参照

wpf - MVVMでの検証に関して必要なアドバイス

構造を改善するために、既存のアプリケーションの1つをMVVMパターンに変換していますが、データ検証を行うための最良の方法に少し戸惑っています。

現在、アプリケーションはデータバインディングを使用してUIとコードをリンクし、いくつかの検証ルールと値コンバーターを使用して、同様の値(日付などにそれぞれ1つずつ)で再利用できます。

MVVMを読んでいるときに、IDataErrorInfoに出くわしました。これは、検証が表示されないようにするため、バインディングなどを設定する際の繰り返しコードをわずかに減らし、より具体的なエラーメッセージを表示できるので魅力的です。

一方、ValidationRulesは、検証が失敗した場合にバインディングデータの転送をブロックします。これは、モデル値に新しい有効な値を変更するだけでよいため、必要です。

私の主な懸念は、ビューモデルで物事を制限しすぎると、ビューで物事が難しくなることです-一般的なケースでは物事を快適なレベルに制限してから、より柔軟性が必要な特定のケースを修正することをお勧めします景色?

だから私の主な質問は、ビューモデルのプロパティに検証と変換を入れるか、検証ルールと値変換器(またはその間の妥協点)に固執する方が良いでしょうか?

0 投票する
1 に答える
1389 参照

wpf - データグリッドでの WPF 検証ルールの問題

データ グリッドで検証ルールを使用すると問題が発生します。

DataGridComboBoxColumn で ValidationRule を使用したいので、この例を使用しました

ガイダンス、特に BindingGroup のもの。

これはある程度機能しますが、非常に壊れているようです。ValidatioRule は、コンボ ボックスの選択が変更されるとすぐには起動しません。代わりに、選択を変更して DataGrid の別の行をクリックしたときにのみ起動します。コンボ ボックスの選択を変更したらすぐに起動する必要があります。

検証ステップをいじってみましたが、役に立ちませんでした。誰か助けてもらえますか?

前もって感謝します!

0 投票する
0 に答える
184 参照

wpf - WPF ValidationRule バグ? バックスペースは無視されます。これに対する回避策はありますか?

私の同僚もこの問題を抱えており、調査の方法で多くのことをする機会がありませんでした.

検証ルールが添付されたデータグリッドのテキストボックスで問題を再現する手順。

  1. 1 つのバックスペースで合法的なコンテンツに戻るような方法で、違法なコンテンツを入力します。
  2. スペースを押してください - テキスト ボックスにエラーが表示されるべきではないのに、まだエラーが表示されています
  3. バックスペースをもう一度押すと、エラーがクリアされます

誰かがこれに遭遇し、回避策を知っていますか?

前もって感謝します!

0 投票する
2 に答える
380 参照

wpf - WPF ValidationRule: 何を検証しているのかを知るにはどうすればよいですか?

ValidationRuleわかりましたので、アイテムの設定幅がそのアイテムの特定の範囲内にあることを確認するために を作成しようとしました。これが私の試みです:

さて、どの要素を検証する必要があるかを知るにはどうすればよいでしょうか? これは、ハードコードされた検証ルールのみをサポートしているようで、実際には使用されていないようです。検証するコンテキストが必要です。私は何かを理解していませんか?これは人の年齢とフィールドの長さだけですか? 静的ステートマシンを提供することになっていますか? これは1990年代ですか?私はとてもイライラしています。

0 投票する
5 に答える
18692 参照

wpf - WPF Binding : ValidationRules に DataAnnotations を使用する

私は、WPF Validation および に関する多くのブログ投稿を読みましたDataAnnotations。私のエンティティDataAnnotationsと同じように使用するクリーンな方法があるかどうか疑問に思っていました。ValidationRules

したがって、これ( Source )の代わりに:

あなたが持っていなければならない場所

WPF Binding で Age プロパティを確認し、次のように DataAnnotation を探します。

これが可能であれば何か考えはありますか?

0 投票する
1 に答える
211 参照

wpf - 検証時にソースオブジェクトのプロパティを設定できますか?

私はwpf-mvvmアプリケーションを持っています。

以下のコードでは、「PartBPremiumBuydown」はクラスのインスタンスです。これには2つのプロパティがあります=>1。値。および2.HasValidationError。

プロパティ「値」は、テキストボックスへのバインドに使用されます。検証エラーがある場合...HasValidationError= trueを設定できますか?

0 投票する
1 に答える
2763 参照

wpf - コードで Binding に ExceptionValidationRule を追加する

Decorator を継承する ErrorProvider コントロールを開発しています。何かにバインドされているコントロール内の要素を検証します。これは、FrameworkElement 内のすべてのバインディングをループし、バインディングの ValidationRules に ExceptionValidationRule と DataErrorValidation を追加します。

これは、作業を行うメソッドです。

どうやら DataErrorValidationRule はバインドに適用されますが、ExceptionValidationRule は適用されません。

なぜこれが当てはまるのか誰にもわかりますか?

編集: わかりました。問題についてもう少し詳しく説明します。

Validation と Binding クラスに関する大量の MSDN ドキュメントを読んできました。Binding.UpdateSourceExceptionFilterプロパティを使用すると、バインディングにExceptionValidationRuleが関連付けられている場合に、バインディングで発生するすべての例外を処理する関数を指定できます。

UpdateSourceExceptionFilter プロパティのメソッドを追加しました。実行されました。しかし!!私は例外を返しましたが、MSDN のドキュメントでは、ValidationError オブジェクトはバインドされた要素の Validation.Errors コレクションに追加されませんでした...

ExceptionValidationRule を動的に追加するコードをコメントアウトし、次のように XAML の Binding に手動で追加しました。

UpdateSourceException メソッドが実行され (私は変更しませんでした)、MSDN に記載されているように Validation.Errors にエラーが追加されました。

この全体で興味深いのは、VB.NET コードを介して行われると、実際には ExceptionValidationRule がバインディングに追加されるという事実です (または、UpdateSourceException が実行されることはありません)。ただし、Validate.Errors はエラーで更新されません。

前に述べたように、DataErrorValidationRule がバインディングに追加され、適切に機能します...ExceptionValidationRule に問題があるだけです。

私の解決策:

検証ルールをバインディングに適用するには、バインディングとプロパティに対してBindingOperations.SetBinding メソッドを呼び出す必要があることがわかりました。ApplyValidationRulesToBindingsメソッドの要素/バインディングの DependencyProperty を取得する方法がなかったため、ルールを適用するコードを、すべてのバインディングを再帰的に取得するメソッドを提供するコールバック メソッドに移動しました。

これが私の解決策です:

ありがとう!

-フリニー