問題タブ [idataerrorinfo]
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.
wpf - POCO、DTO、および IDataErrorInfo
今朝起きたら問題が発生!
私のすべてのコンポーネントには、変更がリポジトリにコミットされる前に DTO を検証するために使用される一連のビジネス ルールがあります。
検証エラーを UI に戻す最善の方法を見つけようとしていたところ、IDataErrorInfo インターフェイスに出会いました。素晴らしい!
ただし、このインターフェイスを実装すると、DTO が POCO に変換され、メモリ使用量の点でより大きなオブジェクトになります。現時点では、すべてのユーザー コントロールが現在の DTO オブジェクトにバインドされています。
DTO を POCO に変換すると、パフォーマンスに影響がありますか? または、検証メッセージを UI に戻すためのより良い方法はありますか?
c# - 関連するが相互に排他的ではないチェックボックスで IDataErrorInfo を使用する
フォームに一連のチェックボックスがあります。1 つ以上をチェックする必要があります。そうでない場合は、そのうちの 1 つがチェックされるまでエラー アイコンを表示したいと考えています。
私の IDataErrorInfo 実装は次のようになります。
ここで、オプション 1 ~ 3 にバインドされているチェックボックスがどれもチェックされていない場合、各チェックボックスにエラー アイコンが表示されますが、これは問題ありませんが、そのうちの 1 つがチェックされている場合、その 1 つのチェックボックスのみにエラー アイコンが削除されます (それらすべてとは対照的に)。
それらのいずれかが変更されたときに、options1-3 のフォームを再ポーリングする理想的な方法は何ですか?
それが役立つ場合 (ただし、通常の winforms コントロールとあまり変わらないと思いますが)、私は DevExpress UI コントロールを使用しているため、チェックボックスは CheckBoxEdit のもので、ErrorProvider は DxErrorProvider です。
編集:解決済み
他のオプションが変更されたときに、他のオプションのプロパティが変更されたことを手動で通知することになりました。
c# - c#-メソッド宣言の角かっこはc#にどのように適合しますか?
メソッド宣言の角かっこはc#にどのように適合しますか?つまり、WPF検証を読んでいるときに、次の例でIDataErrorInfoを使用できることがわかります。
パブリック文字列this[stringpropertyName]
MSDNによると、「角かっこ([])は配列、インデクサー、および属性に使用されます。ポインターと一緒に使用することもできます。」それで、上記の使用法はポインタですか?
c# - ViewModel エンティティの DataAnnotation を使用した Prism IDataErrorInfo 検証
Prism MVVM フレームワークを使用して、WPF でデータ検証を実装しています。プレゼンテーション層にバインドされている ViewModel でクリーンなデータ エンティティを使用しています。
エンティティ (この場合はユーザー) の DataAnnotation 属性に対して検証を実行する基本 ViewModel クラスに IDataErrorInfo の汎用実装を実装しました。
問題は、エンティティにバインドするときに、WPF フレームワークがエンティティの IDataErrorInfo を検索し、このロジックを存在させたい ViewModel を検索しないことです。ViewModel でエンティティをプロパティでラップすると、すべてが機能しますが、ViewModel 内のエンティティの使用を妥協したくありません。
バインドされている子オブジェクトではなく、ViewModel で IDataErrorInfo を探すように WPF に指示する方法はありますか?
ありがとう、マイク
wpf - WPFバインディング用のINotifyPropertyChangedおよびIDataErrorInfoを使用したLINQtoSQLクラス
LINQtoSQLクラスを使用してデータベースにアクセスします。ここで、WPFDataBindingsと検証にLINQtoSQLクラスを使用したいと思います。これらの2つのインターフェイスをプロジェクトモデルに実装するにはどうすればよいですか?INotifyPropertyを自動的に実装することは可能ですか?
c# - ValidatesOnExceptions入力エラーをViewModelに通知する
私のアプリケーションでは、TextBoxにバインドされた数値(doubleまたはint)のViewModelプロパティがあります。ViewModelはIDataErrorInfoを実装して、入力された値が「ビジネスロジック」の許容範囲内にあるかどうかをチェックします(たとえば、高さを負の値にすることはできません)。ページごとに多数のTextBoxがあり、有効なプロパティがページ全体にエラーがあるかどうかを指定するViewModelブール値にバインドされるボタン(ウィザードでは「次へ」と考えてください)があります。ボタンの有効化/無効化状態は、私が作成したIDataErrorInfoルールに従って、有効/無効な値で適切に更新されます。
ただし、入力値が変換されないため(つまり、「12bd39」は有効なdoubleではないため)、例外がスローされたときにビューモデルに通知する方法はありません。その結果、変換例外の場合は、「次へ」ボタンが表示されます。入力が正しくない場合でも有効のままになります。ただし、GUIは、バインディングが原因で、装飾者とのエラーを適切に反映します。
'ValidatesOnExceptions'スタイルエラーが発生したことをビューに通知するにはどうすればよいですか。Josh Smithのここでの見解は、すべてのViewModelプロパティを文字列にし、独自の例外チェックを実行することに依存しているようです。これは、多くの追加作業のようです。さらに、ここでKarl Shifflettの実装を調べ始めましたが、このコードをビューの分離コードファイルに配置するときに予想されるルーティングイベントをキャプチャできないようです。
Silverlightには、サブスクライブできるイベントがあるようですが、WPF(3.5)で完全に同等のものを見つけることができません。どんな助けでも大歓迎です!
wpf - WPF エラー テンプレートが表示されない
バインディング エラーは発生せず、このコードは別の場所で機能します。私は今、それが機能するコードとは異なる方法で何をしているのかをまだ見つけていません。それはそれほど多くのコードではありません。
UserControl.Resource で:
以下のXamlでも:
Model.TagsViewModel の [SAVE] ボタンは、プロパティがユーザーから 10 文字以上入力された場合にのみアクティブになります。ボタンのアクティブ化/無効化は、10、11 を入力してから 8 文字を入力すると正常に機能します。すべてのプロパティの変更が発生します。
モデル:
ビューモデル:
赤い楕円の ErrorTemplate がまったく表示されないのは、何が機能しないのですか?
更新:以下のコードは TEST プロジェクトで正確に機能します。しかし、私の生産的なプロジェクトでは、リソースが見つかりません??? 一体なぜこれ?
c# - データ検証を超えたスタイリング:他のプロパティに基づくスタイリング
この質問が他の場所で行われていないことを願っていますが、この問題に対する既存の回答を表示するための適切な検索用語を見つけるのに苦労しています。
私は、ユーザーが科学データを整然と入力する多くのインタビュースタイルの画面を備えたC#WPF(MVVM)でプログラムを実装しています。そのコントロールのデータがユーザーによって入力されたか、プログラムによってデフォルト値として入力されたか、またはからのテンプレート値であるかに基づいて、前景色と背景色を個別に変更する必要がありますTextbox。DataGridユーザーがインポートした別のファイル。さらに、ViewModelに実装されたIDataErrorInfoからの検証チェックにUIが応答するようにします。
したがって、TextBoxに表示されるデータは、テンプレート値の場合は青、プログラムのデフォルトの場合は緑、ユーザーが入力した場合は黒、IDataErrorInfoが不正なデータであると言った場合は赤になります。
これを実装するための私の最初の答えは、カスタムクラスを作成することでした。
次に、ビュー内のすべてのTextBox.Textプロパティを次のようにバインドします。
そして、someAdornerStringのプロパティに応答するDataTriggersを使用してスタイルを適用し、適切な色を作成します。
ただし、ViewModelのIDataErrorInfoはTextBoxを検証しなくなりました。なぜそうなのですか、そして私の問題を解決するためのより良い方法はありますか?AdornerStringクラス内で検証できません。
考えられる回避策ですが、望ましくありません。
The only other solution I can think of is to have two properties in the ViewModel for each field entered by the user- one for the data itself and the other being the same custom class as above minus the string. However, this means I can't generalize the style used for the textboxes. Each TextBox would have to have a custom style something like this:
since each UI field has a specific custom class associated with it.
I would seriously rather not implement this way, as I have possibly 100+ pages of input screens, with each screen having 1-12 TextBox's each, ignoring the DataGrids thrown in the mix (with parellel arrays of data and their associated custom classes).
Any ideas? I've read about custom validation, though I yet don't see how this might help in this case.
c# - IDataErrorInfo または同様のパターンを使用してエラー メッセージを伝達する
この質問はかなりあいまいで、いくつかの質問が統合されているため、申し訳ありませんが、それらは非常に密接に関連しているため、いくつかの提出物に分割したくありませんでした.
現在、アプリケーションの構成エラーをテストする方法を考えています。利用可能なさまざまなオプションがあり、以前に使用されたものは IDataErrorInfo インターフェイスです。私はこの実装がどのように見えるかに非常に満足していません.それは機能しないからではなく、実際の実装に完全に同意していないだけです. このサイト (52 件の関連するすべての質問) や他のサイトを検索して、Microsoft がキーワード「this」をインデックスで使用することをお勧めする理由を確認しました。これは通常、コレクション内のアイテムのインデックス作成に使用されます。難しい人でも、実装するクラスをエラーのコレクションと見なすことができますが、「this[]」キーワードを暗黙的にテストに使用する必要があることに同意しません。(サイドノート:これは、カスタム コレクション クラスがそれ自体の構成エラーを持つことができないということですか?) なぜこれは「TestErrorState( string propertyname )」のようなメソッド呼び出しやインデックス付きのプロパティではないのですか? そして、どのくらいの頻度で「string Error { get; }」は実際に使用されていますか?私には、それは一種の「ハック」のように見え、実際には使いにくい.
この実装が原因で発生する実際的な問題の 1 つは、他のオブジェクトに関連するオブジェクトがあり、エラー状態を伝播させたいということです。これは、ユーザー インターフェイスに表示されているクラスが、必ずしもユーザーに表示されるとは限らない関連オブジェクトが原因で「エラー状態」になるため、醜いものになります (ユーザーがインターフェイスのオプションをクリックして「下に移動」しない限り)。 」 オブジェクトの階層の 1 レベル)。これは、これらのエラーを伝播するための独自のメソッドを使用してエラー モードのテストを拡張する必要があることを意味し、IDataErrorInfo インターフェイスをまったく使用せずに、まったく別のものを実装する必要があるかどうかを疑問視し始めます。
なぜ IDataErrorInfo がそうなのかについての良い情報がどこにあるのか教えてください。そして、オブジェクトの階層を介して伝播するエラーモードをどのように持つかについて、素晴らしいアイデアを提供していただければ、それは素晴らしいことです! 伝播と言うとき、これはイベントのように感じられるため、例外を意味するものではありません。オブジェクトが構成エラーを要求された場合、オブジェクトはそのすべての子にもエラーを要求し、子のエラー メッセージも渡す必要があるということです。
wpf - IDataErrorInfo と例外の間の WPF 検証順序
と の両方を持つコントロールがValidatesOnDataErrors = trueありValidatesOnExceptions = trueます。私もValidation.Errorsこの装丁のコレクションを見ているものがあります。
ユーザーは、変換可能 (例外なし) であるが無効な値 (IDataErrorInfo がエラー メッセージを報告する) を入力します。エラーはエラー コレクションに表示され、期待どおりに表示されます。
ユーザーは、変換できない値を入力します (例外がスローされます)。IDataErrorInfo は以前と同じエラーを報告します (モデル値が変更されていないため)。
この後者の場合、リストに例外エラーのみを表示することを好みますが、例外とデータ エラーの両方を (任意の順序で) 表示することを受け入れます。
ただし、実際にはデータ エラーのみがリストに表示され、ユーザーに誤解を招くようなエラー メッセージが表示されます (現在の値ではなく、以前に入力した値のエラーであるため)。
内部でトレースすると、2 番目のユーザー アクションが発生すると、例外エラーがリストに追加され、再度削除されてデータ エラーに置き換えられます。両方のエラーが同時にリストに表示されることはありません。
これから目的の動作を取得する方法はありますか?
(ステップを引き戻します: 私が達成しようとしているのは、IDataErrorInfo 検証を組み合わせることです [ドメインレベルのテストにより便利であるため] ですが、UI の例外に注意を払います [そうしないと、ユーザーが何かを入力したときに大文字と小文字を区別しません)すべての VM プロパティを文字列やその他のナンセンスにするような極端なことはしたくありません。)