問題タブ [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.

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

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 ラベルを追加しました

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

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 がコントロールを再検証することはありません。

私が追加したテンプレート。

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

c# - C# - 「INotifyDataErrorInfo」を実装できない

私はac#クラスを持っています。

「INotifyDataErrorInfo」インターフェースも実装する必要があります。ただし、赤色で表示され、インターフェイスの名前空間を識別しません。「using System.ComponentModel;」を追加しました。それも。しかし、うまくいきません。

誰もそれがなぜだか知っていますか?

ここに画像の説明を入力

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

c# - wpf検証にValidationRulesとINotifyDataErrorInfoの組み合わせを使用することは可能ですか?

WPF では、検証を行う 3 つの方法があります。

  • 検証規則
  • IDataErrorInfo
  • INotifyDataErrorInfo

これらを組み合わせて同時に使用することは可能ですか?私のニーズでは、INotifyDataErrorInfo の柔軟性を使用して新しいルールを検証したいと考えていますが、検証したい同じオブジェクトの既存の ValidationRules に干渉したくありません。

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

c# - プロパティの INotifyDataErrorInfo 検証を抑制する方法

クラスの実装INotifyDataErrorInfoがあります。エラー通知のあるプロパティがいくつかあります。例えば、

このクラスは、他の多くのクラスによって継承されます。すべて正常に動作します。今、特定の操作の UI に通知を表示したくない場所が 1 つあります。操作後に通知が必要です。とにかく通知を抑制することができますか。

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

c# - WPF ListBox データ検証

文字列が追加または削除されるたびに文字列を検証する文字列項目の ListBox があります。

以下は私がまとめたコードですが、問題は ObservableCollection Addresses が変更されたときに ValidateAddresses が呼び出されないことです。

意図した動作は、無効な文字列が見つかった場合に、エラー メッセージを表示するツールチップと共に ListBox の周りに赤い境界線を表示することです。

この INotifyDataErrorInfo セットアップは TextBoxes に対して正常に機能するため、ここで何が間違っているのかわかりません。

ビューモデル

XAML

検証方法 (呼び出されない)

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

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 に直接バインドしても問題なく動作し、期待どおりの結果が得られます。