問題タブ [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 - WPFDataGridバインディングの検証とキャストの問題
さまざまな種類のエラーに対して、DataGridバインディングがどのように異なる動作をするのか疑問に思いました。サンプルプロジェクトを設定しました。
データクラス:
背後のメインウィンドウコード:
およびMainWindowXaml:
さて、日付列に関して-将来の日付を入力すると(したがって、ArgumentOutOfRangeExceptionが発生します)、テキスト列は引き続き編集できます。無効な日付(たとえば、5月35日)を指定すると、テキスト列を編集できません。
なぜWPFはこのように動作するのですか?
c# - ObservableCollection を IDataError で動作させる方法
ObservableCollection(コレクションまたはint)の個々の要素を表示するダイアログボックスがあります。ユーザーがコレクションの個々の値を変更すると、変更を検証したいと思います。
私の VM には、コレクションのプロパティのみがあり、私の XAML は個々の要素にバインドされています。
では、コレクション内の項目が変更されたときに検証プロパティ インデクサーを呼び出すにはどうすればよいでしょうか。
私はまだWPFにかなり慣れていないので、これには簡単な解決策があると思います..
助けてくれてありがとう。
これが XAML です。10 チャンネルのそれぞれに同等のテキスト ボックスがあります。
VM のコード ビハインドの一部を次に示します。grp_ オブジェクトはモデルです
c# - データ バインディング、IDataErrorInfo、および複雑なプロパティの命名
Name というプロパティを持つ MyClass.cs があり、IDataErrorInfo を継承する viewModel があり、この viewModel で MyClass の複数のインスタンスを作成し、それらすべてを ObservableCollection< MyClass> に追加したとします。このコレクションは次のようになります。 DataGrid の ItemsSource であり、その DataGridTextColumn の 1 つが Name プロパティにバインドされています。これは、次の XAML のように非常にうまく機能します。
次のように、IDataErrorInfo の列名を指定する必要があります。
問題は、この "Name" プロパティが私の viewModel にないことです。これは MyClass.cs にあるため、 IDataErrorInfo 列名に何を指定すればよいかわかりません。 Name と MyClass.Name の両方を試しましたうまくいきませんでした、何か提案はありますか?? 前もって感謝します
wpf - IDataErrorInfo はメモリの無駄ですか?
ビジネス オブジェクト (1000 以上) のリストがあり、50 ほどのプロパティがあり、実行する必要がある約 70 の異なる検証があります。バリデーションルールを使用するのが道のようですが、私は本当に好きIDataErrorInfoです. IDataErrorInfo同じ検証をずっと使用している間に、すべてのオブジェクトを定義するのはメモリの無駄ですか?
PS: 膨大で見づらかったので、コードは投稿しませんでした。
wpf - WPF の ShowDialog ウィンドウでのデータ検証
ウィンドウに ShowDialog として表示するウィンドウがあります。INotifyPropertyChanges と IDataErrorInfo を実装するオブジェクトにバインドするテキスト ボックスがいくつかあります。すべての xtboxes が検証された場合にのみ [OK] ボタンが有効になり、ユーザーが [OK] ボタンをクリックした場合に次の移動が発生するようにしたいと考えています。
ボタンを ICommand にバインドし、CanExcute() でテキストボックスの検証を確認できますが、Excute で何ができるでしょうか? オブジェクトはウィンドウについて知りません。また、テキストボックスの検証を確認してから、すべて有効なイベントを発生させて [OK] ボタンを有効にすることもできますが、IDataErrorInfo 実装で既にチェックしているため、重複したコードが存在します。
では、正しい方法は何ですか?
前もって感謝します
c# - IDataErrorInfo - 空でない検証属性のコレクションはありますか?
見つからないだけなのか、存在しないのかわかりませんが、コレクションがnull/空かどうかをチェックする検証属性はありますか?
そうでない場合、独自の検証属性を作成する方法に関する適切なリソースはありますか?
wpf - wpfidataerrorinfoコンボボックス
単純なビューとビューモデルがあり、後者はIDdataErrorInfoとIValidationExceptionHandlerを実装しています。ビューには、ItemsSourceがコレクションにバインドされ、SelectedValueがプロパティにバインドされたコンボボックスが含まれています。データエラーと例外を検証します。プロパティの更新が変更され、ソースが更新されたことを通知します。
私はデータ注釈を使用しており、プロパティはRequired属性とRange属性で「装飾」されており、ビューを実行すると、コンボボックスにエラーアドナーとRequired属性に指定したメッセージが表示されると期待していました。ただし、装飾者にカーソルを合わせると、代わりに「値""を変換できませんでした」というメッセージが表示されます。
プロパティのゲッターで選択した値を確認し、値が選択されていないことがわかった場合は、メッセージとともにValidationResultを返す必要がありますか?Required属性を使用するだけでうまくいくと思いましたが、コンボボックスでは機能しないようです。
どんな助けでも大歓迎です。
wpf - WPFのDataAnnotationsとIDataErrorInfoの組み合わせ
RequiredWPFアプリケーションを作成していますが、データ注釈を使用してフィールドRangeなどを指定したいと考えています。
私のViewModelクラスは通常のINotifyPropertyChangedインターフェイスを使用しており、C#4を使用してオブジェクト全体を簡単に検証できますが、Validator正しく検証されない場合は、フィールドを赤で強調表示することもできます。このブログ投稿はここにあります(http://blogs.microsoft.co.il/blogs/tomershamam/archive/2010/10/28/wpf-data-validation-using-net-data-annotations-part-ii.aspx )これは、バリデーターを実装して使用するためのベースビューモデルを作成する方法について説明していますIDataErrorInfoが、実装は実際にはコンパイルされず、どのように機能するかを確認できません。問題の方法は次のとおりです。
問題はGetValue提供されていません。GetValue彼はあなたが継承するときに来ることについて話しているかもしれDependencyObjectませんが、構文はまだ機能しません(DependencyPropertyパラメーターとして渡すことを期待しています)が、私はOnPropertyChanged("MyProperty")セッターで呼び出される通常のCLRプロパティを使用しています。
IDataErrorInfo検証をインターフェースに接続する良い方法はありますか?
c# - IDataErrorInfo.Error プロパティへの WPF バインドの設計時の問題
エラーの概要を返すオブジェクト IDataErrorInfo.Error プロパティに TextBox.Text をバインドしたいと考えています。私のオブジェクトは DataContext です。今、私はそのようなテキストボックスを持っています:
実行時にはすべて正常に動作しますが、設計時に Visual Studio 2010 でエラーが表示されます: InvalidOperationException was throw on "Binding": Object 'null' cannot be used as an accessor parameter for a PropertyPath. アクセサーは、DependencyProperty、PropertyInfo、または PropertyDescriptor である必要があります。このエラー (黄色のバー) により、プロパティ ツールボックスを使用してウィンドウを編集できません。誰でもこのエラーを解決するのを手伝ってくれますか?
wpf - それらのいずれかが変更されたときに複数のプロパティを検証するにはどうすればよいですか?
StartDate と EndDate の 2 つの日付フィールドがあります。StartDate は EndDate より前でなければなりません。
ユーザーが StartDate を EndDate より大きい値に変更すると、その DatePicker の周りに赤い境界線が表示されます。逆の場合も同様です。ユーザーが 2 番目のボックスを変更して日付範囲を正しくしても、1 番目のボックスにはまだ検証エラーが表示されます。
どちらか一方が変更されたときに、両方の日付フィールドを検証するにはどうすればよいですか?

私は使用していますIDataErrorInfo
いずれかのフィールドが変更されたときに両方のフィールドを検証する必要があるため、単純に PropertyChange イベントを発生させることはできません。そのため、両方でもう一方の PropertyChange イベントを発生させると、無限ループに陥ります。
また、他の日付が検証エラーを返した場合に日付フィールドをクリアするという考えも好きではありません。