1

私は3つのボタンを持つWPFフォームを持っていて、それらにイベントをルーティングしています.コマンドは開始時にバインドされています...

 private void InitCommandBinding(UIElement frameworkElement) {
   CommandBinding commandBinding;





   commandBinding = new CommandBinding(ViewModelCommands.Save, Save_Executed, Save_CanExecute);
   frameworkElement.CommandBindings.Add(commandBinding);

   commandBinding = new CommandBinding(ViewModelCommands.SaveAndClose, SaveAndClose_Executed, SaveAndClose_CanExecute);
   frameworkElement.CommandBindings.Add(commandBinding);

   commandBinding = new CommandBinding(ViewModelCommands.Delete, Delete_Executed, Delete_CanExecute);
   frameworkElement.CommandBindings.Add(commandBinding);
  }

the details ui has code like

 private void Delete_Executed(object sender, ExecutedRoutedEventArgs e) {
   try
   {do validations }
}


private void Delete_CanExecute(object sender, CanExecuteRoutedEventArgs e) {
   e.CanExecute = viewModel.IsValid(); (returns bool)
  }

有効性は、ボタンなどを有効または無効にします。

フォームには新しいオブジェクトまたは古いオブジェクトのインスタンスがあり、データに対して検証が行われます

私の問題は、イベントが常に実行され、フォームがハングするだけで、検証コードが db などをポーリングしてチェックすることです....

フォームがロードされたときに一度だけ起動する方法はうーん....

4

1 に答える 1

2

フォームの読み込み時にデータの有効性を確認するだけでよく、IsValid メソッドはリソースを大量に消費することを理解していますか? IsValid()メソッドを IsValidプロパティに変更し、これを Form_Loaded イベントに設定してみませんか?

CanExute メソッドは、UI が TextChanged や LostFocus などのイベントを発生させるたびにチェックされます。したがって、このようなメソッドは非常に軽量にすることをお勧めします。

于 2009-10-25T14:52:00.113 に答える