問題タブ [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.
silverlight - ErrorsChangedイベントを発生させるときのINotifyDataErrorInfoArgumentOutOfRangeException
これは奇妙なものであり、現時点では、マシンの構成に関係があるのではないかと考えています。
基本的に、私はかなり標準的な実装を作成しました。INotifyDataErrorInfo
特定の状況では、ErrorsChanged
イベントを発生させると、が発生しArgumentOutOfRangeException
ます。この例外には多くの情報は含まれていません。それに加えて、非負のインデックスとコレクションサイズに関するArgumentOutOfRangeException crossed a native/managed boundary
標準的な説明が表示されます。ArgumentOutOfRangeException
はInnerException
nullです。スタックトレースは次のとおりです。
私が自分のマシン構成について言及する理由は、ブログに投稿されたいくつかの解決策(たとえば、こことここ)を試し、同じ問題(つまり、私のコードではなく、INotifyDataErrorInfoの別の実装)を取得したためです。私がしている問題を抱えている他の人。グーグルすると、役に立たないランダムなヒットがいくつか発生します。
必要な状態は次のとおりです。
- 検証エラーがトリガーされるように、コントロールに値を入力しました。(これは正常に機能し、エラーテキストは期待どおりにUIに表示されます)。
- 次に、検証が成功し、エラーがエラーコレクションから削除されるようにコントロールに新しい値を入力します(HasErrorsはfalseを返します)。
- この変更をエラーなしで正常に検証するためにErrorsChangedが発生し、例外が発生します。
更新:検証エラーを表示しているTextBoxからフォーカスを移動した場合にも再現できます。
サービスパック/アップデートなどを見逃したのではないかと思います。フレームワークコードにかなりの初歩的エラーがあり、同時に他の人には起こらないように見えるからです。
更新:Silverlight4の最終的なRTMビルドを使用しています。RCやベータ版ではありません。
更新:このホワイトペーパーで提供されている公式のMSサンプルでも同じ結果が得られます。
更新:コードと上記のサンプルを別のマシンでテストしましたが、正常に動作します。通常のマシンでは動作しないので少し不安なので、これを解決したいと思います(これまで問題はありませんでした)。これを引き起こしている原因を突き止める方法についての提案をいただければ幸いです。問題のあるマシンにSilverlight(Runtime、SDK、Toolkit)を再インストールしましたが、問題は解決していません。
更新: MSシンボルサーバーでソースサーバーのサポートを有効にすることで取得された、例外が発生しているフレームワークコードのコールスタックは次のとおりです。
更新:アプリケーションは、デバッガーが接続されていなくても(問題のあるマシンで)正常に実行され、期待どおりに動作し、未処理の例外スクリプトは呼び出されません(これはちょっと困惑しましたが、VSに関連している可能性がありますか?)。グーグルで簡単に検索して、運が悪かったのにここで光を当てる可能性のあるSilverlightプラグインログファイルを見つけることができるかどうかを確認しました。そのようなログはありますか?
silverlight - Silverlight の AutoCompleteBox と INotifyDataErrorInfo
INotifyDataErrorInfo インターフェイスを正常に適用し、AutoCompleteBox にバインドした人はいますか。これを試しましたが、応答がありません。コントロールは、他のコントロールのように応答しません。つまり、赤い境界線と警告ツールチップが表示されます。また、Validation Summary コントロールにエラーが表示されることもありません。
標準の TextBoxes と DatePickers を正常にセットアップしました。これらは、インターネット上の人々から親切に提供された多くの例に従って完全に動作します。
画面の一貫性のためにこれに対する答えがあれば良いでしょう。また、 INotifyDataErrorInfo に付属する HasErrors プロパティにバインドして、保存の準備ができたらボタンを有効にしたいので、これなしでは実行できません。これらのボックスが正しいことを確認する追加のコード。
現時点では、MVVMLight EventToCommand バインディングを使用して LostFocus イベントを登録することで、これらを別の方法で処理しています。
ViewModel では、次に RoutedEventArgs.OriginalSource を TextBox にキャストし、そのようにテキストを取得します。これにより、ボックスが空であるか、ボックスのリスト内の項目と一致しない限り、ユーザーがボックスを離れることができなくなります。
viewmodel - INotifyDataErrorInfo再利用可能なメソッド
私はMVVM-Lightを使用しており、すべてのビューモデルに対して、同じプロパティタイプを検証するために同じメソッドを使用する場合があるINotifyDataErrorInfoの実装を作成する必要があります。この例では、DateTimeを使用しています。
このコードを他のビューモデルで再利用できるようにするにはどうすればよいので、同じことを何度も実装する必要はありませんか?
INotifyDataErrorInfoを実装するクラスを作成しました:
しかし、ビューモデルで使用したい場合は機能しません。
エラー:
これは、メインビューモデルファイルにMVVM-Lightの基本クラスがあるためです。
これを解決するための助けはありがたいです。
silverlight - ストック I*DataErrorInfo 以外に、UI 検証エラーの視覚化に効果的な代替手段はありますか?
別の質問で、Infragistics でエディター以外のコントロールのエラーを表示する方法を尋ねましたXamGrid
。さらに別の質問は、私がやろうとしていることの主な問題に対処しています: show errors in response to server-side validation。
さらに一般的に言えば、またはメカニズムを使用しないSilverlight でエラーを視覚化するのにうまく機能するパターンを思いついた人はいますか? 私のwinformの時代に戻って、検証はほとんど後付けのように思えたので、私は何かを思いついた. 現在、MVVM はビュー (コントロール スタイル、背景、ツールチップなど) をバインドしてモデルの「エラー」プロパティを表示することを提案していますが、実際には、上記の 2 つのインターフェイスが優勢であり、テクノロジ固有のようです (はい、 pattern と WPF/Silverlight が一致しました)。IDataErrorInfo
INotifyDataErrorInfo
上記のメカニズム以外に、MVVM 設計で実行可能なものはありますか? 他にどのような選択肢がありますか?結局のところ、私はMVVMに適合するSilverlightソリューションを探していますが、INotifyDataErrorInfo
すべてのコントロール(特にサードパーティのもの)がこれをサポートしているとは限らないため、またはサポートしている場合、正確には期待どおりではありません。
c# - WPF4.5DataGridのINotifyDataErrorInfoが壊れていますか
WPF4.5プロジェクトでINotifyDataErrorInfoの簡単な実装を行いました。これはWPFの新しいインターフェイスですが、Silverlightでしばらくの間使用可能になっています。
NET4.5はまだアルファ版と見なされていることは知っていますが、それが自分のコードなのか、フレームワークに問題があるのかを調べようとしています。
インターフェイスは期待どおりに機能しますが、オブジェクトがDataGridにバインドされると失敗します。
私が受け取る例外は次のとおりです。
System.NullReferenceExceptionは
、オブジェクトのインスタンスに設定されていないユーザーコードMessage=Object参照によって処理されませんでした。
Source = PresentationFramework StackTrace:at MS.Internal.Data.ClrBindingWorker.OnDataErrorsChanged(INotifyDataErrorInfo indei、String propName)at MS.Internal.Data.PropertyPathWorker.OnErrorsChanged(Object sender、DataErrorsChangedEventArgs e)atSystem.Windows.WeakEventManager.ListenerList`1。 DeliverEvent(Object sender、EventArgs e、Type managerType)at System.Windows.WeakEventManager.DeliverEvent(Object sender、EventArgs args)at System.ComponentModel.ErrorsChangedEventManager.OnErrorsChanged(Object sender、DataErrorsChangedEventArgs args)at INotifyDataErrorInfoTest.Person.NotifyErrorsChanged(String property )INotifyDataErrorInfoTest \ Person.cs:line 109 at INotifyDataErrorInfoTest.Person.AddErrorForProperty(String property、String error)in INotifyDataErrorInfoTest\Person。cs:line 122 at INotifyDataErrorInfoTest.Person.Validate(String propertyName)in INotifyDataErrorInfoTest \ Person.cs:line 150 at INotifyDataErrorInfoTest.Person.set_FirstName(String value)in INotifyDataErrorInfoTest \ Person.cs:line 18
コードは以下にあるか、http://dl.dropbox.com/u/14740106/INotifyDataErrorInfoTest.zipのプロジェクトにあります
これがバグであるというコンセンサスがある場合は、MSConnectに投稿します。
テスト:Personオブジェクトの単一のインスタンスにバインドされた2つのテキストボックスがあります。最初のテキストボックスにJamesの値を設定すると、検証に失敗し、赤いボックスが表示されます。グリッド内のユーザーの名をJamesに設定すると、例外がスローされます。
PS:MVVMではないことは知っていますが、問題を証明または反証するためだけのものです。
c# - 検証を強制的にUserControlに表示する方法
ユーザーコントロールを表示するために、ツールチップを使用したストック/標準の赤い境界線の検証が必要です。以下のコードを参照してください。メインページとUserControlがあります。
UserControlにはテキストボックスとボタンがあります。UserControlsはIdプロパティにバインドし、このIdをTextBox内に表示します。
メインページにはUserControlとTextBoxがあります。それらはFirstValueとSecondValueにバインドされました。どちらのプロパティもエラーを発生させます。テキストボックスに何かを入力/変更すると、境界線と概要が表示されます。UserControlでテキストを変更すると(要約にはエラーが表示されますが、境界線は表示されません)、エラーをクリックすると、ボタンにフォーカスが表示され、TextBoxに移動しません。どうすれば修正できますか?UserControl全体を赤い境界線の内側に配置したいと思います。
MainPage XAML:
MainPage CS
UserControl XAML:
UserControl CS:
silverlight - 検証にINotifyDataErrorInfoを使用するときに、フォーカスをコントロールに戻します
INotifyDataErrorInfo
Silverlightの実装を使用した簡単な検証を使用しています。
送信するとき、すべてのエラーを表示するためにすべてのプロパティを検証しています。
検証が発生したときに、検証エラーのある最初のコントロールにフォーカスを戻す必要があります。
これを行う方法はありますか?助言がありますか?
c# - 検証ルールを使用してエラーが発生したときにデフォルト値を設定するにはどうすればよいですか?
検証ルールを使用してカスタムメッセージを表示し、INotifyDataErrorをビジネスルールに使用しています。
私のコードのこの部分:
検証はNullableデータ型に対するものです。つまり、値はnullまたは整数にすることができますが、「5b」のような誤った入力はできません。
問題は、このエラー(noIllegalChars = true)が発生する場合、プロパティに値nullを設定するにはどうすればよいですか?
編集:私がこれを行っている理由は、ユーザーがテキストボックスを空のままにしたとき(値は "")、技術的にはnull値であるプロパティに対して、プロパティに""を設定しようとしているためです。
c# - INotifyDataErrorInfoがエラーを発生させないコードビハインドで変更されました
コードビハインドから検証を実行する問題が発生しています。私のデータはデータグリッドに表示されます。列(タイプ)の1つはドロップダウンであり、ドロップダウンメニューが変更されると、コードビハインドで処理されるDropDownClosedイベントがトリガーされます。
私が達成しようとしているのは、次の列の内容を検証して、ドロップダウンで新しく選択したタイプと一致させることです。一致しない場合は、検証エラーをグリッドに表示したいと思います。INotifyDataErrorInfoインターフェイスを使用して検証を実装しましたが、コードビハインドで使用する場合を除いて、非常にうまく機能します。コードビハインドが検証を呼び出すと、データグリッドのValidationSummaryが更新されることはありません。私がここで間違っていること??? デバッガーを使用すると、インターフェイスのエラー辞書に追加されているエラーをはっきりと確認できます...
ハンドラーは次のとおりです。
ルールの検証メソッドは、ruletypevalueに基づいてこのメソッドを呼び出します
MSDNのサンプル実装に従いましたhttp://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo%28VS.95%29.aspx
c# - WPF 4.5 で INotifyDataErrorInfo を実装するには?
.NET Framework 4.5 でこのインターフェイスが表示されることに気付きました
最初に Silverlight での実装方法を探していましたが (同じ方法で実装されていると想像できます)、この新しいインターフェイスのコンパクトなデモが見つかりません。どのように使用できるかを示すことは可能ですか?
それを理解するための小さなデモを本当に見つけたい