アプリケーションにデータグリッドがあり、値の合計が100に等しいデータグリッドの特定の列が必要です。
のように:
20
b 20
c 60
これは正しいです
20
b 20
c 62
これは正しくありません
MVVM広告INotifyDataErrorInfoでこれを実装する方法はありますか?
私の問題は、プロパティをセルにバインドしてからErrorChangedをスローすると、データグリッドがデータを変更した行にロックされるため、元の値を復元しない限りどこにも移動できないことです。列は再び100になります。
CellEditなどで手動検証を行うさまざまなコードビハインドソリューションを投稿しないでください。このようなダーティなコードは自分で作成できます。バインディングとMVVMに適合するクリーンなソリューションを見つけようとしています
私が見る限り、 Silverlightデータグリッドは完全に壊れており、未完成であり、誰も気にしません。誰かが適切なデータグリッドを知っているかもしれません(または、Silverlight 5で実際に修正したのでしょうか?)
今のところ以下を使用します:
私のViewModelコンストラクターで
validator = new Validator(this);
validator.AddValidationFor(() => PayElements).When(() => _payElements.Where(p1 => (!String.IsNullOrEmpty(p1.Distribution) && FormatChecker.IsDecimal(p1.Distribution, 3, 2))).Sum(p2 => Decimal.Parse(p2.Distribution)) != 100).Show("ERROR!");
ここで、PayElementsは私のコレクションです(ところで、私の悪いことですが、実際には_payElementsから作成されたICollectionViewであり、これはObservableCollectionです)。次に、任意のオブジェクトへのOnChanges
validator.ValidateAll();
これにより、コンストラクターで作成された検証ルールが評価されます。この後、オブジェクトコレクション全体のビューモデルのerrorCOllectionにエラーが発生しますが、赤い境界線は表示されません。リストでよくエラーがあり、保存ボタンを無効にしていることがわかります:)