0

wpf アーキテクチャに関する質問があります。私の xaml フォームには、メイン オブジェクト (顧客)、2 つのデータグリッド (顧客情報) があります。

顧客のプロパティでは、検証があります (セッター パターンで INotifyDataErrorInfo と例外を使用)。両方のデータグリッドのいくつかの列で同じです。

フィールドのすべての個々の検証がOKの場合、および別の補足ルールがOKの場合(「顧客は1つの住所を持っている必要があります」)、下の[保存]ボタンを有効にしたいと思います。

マルチデータトリガー条件で自分の道を見つけようとしていましたが、めちゃくちゃになっているように感じます。

変更 (フィールドがフォーカスを失うと、フィールドの検証が OK または NOK になる) をすぐに保存ボタンの状態に変更したいのですが、処理時間はあまりかかりません (すべての検証ルールを再実行する必要はないように感じます。 HasError インジケーターをチェックするだけです)。

関連するコードをどのように整理すればよいですか:

  • フィールドに添付されたイベントに?
  • multidatatriggers xaml 部分に?
  • 部分をコード化するには?

データグリッド (セル検証テンプレートを持つ) にリンクされた「グローバル検証インジケーター」にアクセスできますか?

ポイントをより明確にするのを手伝ってくれてありがとう。

4

1 に答える 1

1

これは、インターフェイス実装のHasErrorsプロパティを使用して、非常に簡単に実現できます。何らかの保存関数をINotifyDataErrorInfo使用していると仮定すると、このプロパティ チェックをハンドラに追加するだけです。CommandCanExecute

private bool CanSave(object parameter)
{
    return !((Customer)parameter).HasErrors;
}

...

public ICommand Save
{
    get { return new RelayCommand(action => SaveCustomer(), canExecute => 
        CanSave(SelectedClient)); }
}
于 2013-10-03T13:03:43.067 に答える