問題タブ [inotifydataerrorinfo]
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.
c# - ユーザー コントロールを含むウィンドウを 2 回目に開くと、INotifyDataErrorInfo が無視される
私はかなり混乱した状況に陥っています:
INotifyDataErrorInfo
すぐにエラーを返す (テキスト フィールドが空でない場合)ビューを表示するダイアログを開くと、赤い境界線のエラー通知が表示されます。
オープニング #1:
何もせずにウィンドウを閉じてから、開くボタンをもう一度クリックします。
オープニング #2:
一体何?エラーフラグを確認しましたが、設定されています。テキストを削除して何かを書き戻すと、エラー境界が再び表示されます。string empty? error: no error
ここに小さな再現ケースがあります:
編集:すべてのショーで作成されるViewModelを元に戻し、INCP変更イベントを引き起こしました
MainWindow.xaml.cs
MainWindow.xaml
View.xaml
境界線が消える理由がわかりません。
私が発見したこと: 毎回新しい (単一のリソース インスタンスではなく) ビューを作成すると、毎回最初から赤い境界線が使用可能になります。
new のたびにインスタンス化INotifyDataErrorInfo
される別の に移動することをテストしました->運がありません。ViewModel
編集 2: エラーを表示し続けることを示すために、ビューに HasError ラベルを追加しました
c# - ErrorsChanged イベントで WPF UI コントロールが正しく検証されない
抽象基本クラスに次の INotifyDataErrorInfo 実装があります。
基本クラスから派生したモデルでは、Task<ValidationResult> GetValidationResultAsync()
必要なメソッドを実装し、流暢な検証 Nuget パッケージを使用します。
問題は、ViewModel からモデルのメソッドを呼び出すとValidateAsync()
、UI 入力コントロールが正しく無効化/検証されないことです。実際にはタブ コントロールがあり、タブ インデックスのモデルが変更されていることを検証します。変更すると赤い境界線が表示される場合があります。タブを変更しますが、次のタブ変更まで通常の状態に戻ります。
デバッグでは、ValidationErrors
プロパティがエラーを返すことを示しています。
私の XAML 入力コントロール コードは以下のようなものです。
【アップデート1】
MainWindow
タブ コントロールと 3 つのタブ項目で使用することに注意してください。各タブ項目は UserControl です。
すべての XAML UserControls の Validation.Error イベントに接続しましたが、タブで選択したインデックスの値が変更されても、Validation.Error が最初のタブで 1 回発生し、二度と発生しないことに気付きました。何らかの理由でどこかにクリーンアップがあると思われます。 .
モデルの検証を開始する SelectedTabIndex のコード。
ViewModel 内のモデルのValidateModels
メソッド呼び出し。ValidateAsync
MainWindow タブ コントロール XAML。
【アップデート2】
カスタム エラー スタイルとカスタム エラー テンプレートを追加した後、コントロールのツールチップには条件が満たされていないエラーが表示されたままですが、エラー テンプレートはクリアされています。そのため、TextBox にはカスタムまたはデフォルトのエラー テンプレートは表示されませんが、検証エラーが存在し、ツールヒントにエラーが表示されます。
TabIndexChange で XAML テンプレートがクリアされる理由と、少なくとも表示しているアクティブなタブ項目で更新されない理由。これは私が解決すべき問題かもしれません。
また、前に述べたように、SelectedTabIndex セッターが最初に呼び出されたときを除いて、ErrorsChanged がコントロールを再検証することはありません。
私が追加したテンプレート。
c# - wpf検証にValidationRulesとINotifyDataErrorInfoの組み合わせを使用することは可能ですか?
WPF では、検証を行う 3 つの方法があります。
- 検証規則
IDataErrorInfo
INotifyDataErrorInfo
これらを組み合わせて同時に使用することは可能ですか?私のニーズでは、INotifyDataErrorInfo の柔軟性を使用して新しいルールを検証したいと考えていますが、検証したい同じオブジェクトの既存の ValidationRules に干渉したくありません。
c# - プロパティの INotifyDataErrorInfo 検証を抑制する方法
クラスの実装INotifyDataErrorInfo
があります。エラー通知のあるプロパティがいくつかあります。例えば、
このクラスは、他の多くのクラスによって継承されます。すべて正常に動作します。今、特定の操作の UI に通知を表示したくない場所が 1 つあります。操作後に通知が必要です。とにかく通知を抑制することができますか。
c# - WPF ListBox データ検証
文字列が追加または削除されるたびに文字列を検証する文字列項目の ListBox があります。
以下は私がまとめたコードですが、問題は ObservableCollection Addresses が変更されたときに ValidateAddresses が呼び出されないことです。
意図した動作は、無効な文字列が見つかった場合に、エラー メッセージを表示するツールチップと共に ListBox の周りに赤い境界線を表示することです。
この INotifyDataErrorInfo セットアップは TextBoxes に対して正常に機能するため、ここで何が間違っているのかわかりません。
ビューモデル
XAML
検証方法 (呼び出されない)
wpf - CollectionView を使用して INotifyDataErrorInfo をリッスンする方法
次のシナリオがあります。
XAML:
Nodes はObservableCollection
、ListCollectionView を含むカスタムです。
T
この場合は、Node
私が興味を持っているもの (NodeResults と呼びます) を含む多くのプロパティを持つオブジェクトです。
とNodeResults
:
ObservableValidatableModelBase
を実装INotifyDataErrorInfo
し、そのエラーを というコレクションに保存しますerrors
。
私がやりたいことは、 の個々Node
の がCollectionView
に通知してListView
、無効な (無効な がある) 個々のエントリがNodeResults
画面上で強調表示されるようにすることです。
NodeResults
私の最初の本能は、Node が'ErrorsChanged
イベントにサブスクライブしてバブリングする必要があるためBubbleErrorsChanged
、クラスのメソッドObservableValidatableModelBase
が必要であるということですが、それは機能していないようです。
別の可能性は - ListView には検証の例外を表示するためのデフォルトのテンプレートもありますか? そうでない場合、このようなものが機能する必要がありますか? (そうではありません...)
エラーが発生したかどうかに応じて、 Brushes.RedValidationExceptionToColourConverter
または Brushes.White を返すだけNothing
です。
注: テキスト ボックスを Nodes.NodeResults.SomeProperty に直接バインドしても問題なく動作し、期待どおりの結果が得られます。