1

アプリケーションにデータグリッドがあり、値の合計が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にエラーが発生しますが、赤い境界線は表示されません。リストでよくエラーがあり、保存ボタンを無効にしていることがわかります:)

4

1 に答える 1