解雇WPF路由事件?

时间:2009-10-25 14:15:50

标签: wpf routedevents

我有一个带有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等以检查....

如何在表单加载mmm时让它们触发一次......

1 个答案:

答案 0 :(得分:2)

如果我理解你,只需要在表单加载时检查数据的有效性,并且IsValid方法是资源密集型的吗?  为什么不将IsValid()方法更改为IsValid 属性并将其设置为Form_Loaded事件?

当UI触发像TextChanged,LostFocus等事件时,将检查CanExute方法。所以你最好使这些方法非常轻量级。