2009-10-25 83 views
1

我有3个按钮WPF的形​​式,并传送他们的活动,命令在开始绑定...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) 
    } 

有效性启用和禁用按钮等

的形式有一个实例对象的新的或旧的和验证可以发生在数据

我的问题是,该事件只是EXCUTE所有的时间和形式只是挂起原因验证代码并调查数据库等检查....

如何我只是让他们在表单加载时触发一次嗯......

回答

2

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

无论何时UI触发像TextChanged,LostFocus等事件时,都会检查CanExute方法。因此,您最好使这些方法非常轻量。

+0

谢谢领先,我猜CanExute激发了很多,我有验证代码,比如检查db等代码是否存在轮询数据库。验证框架服务处理,但UI级别问题出现... – abmv 2009-10-25 14:59:55

+0

Spot - 回答。 CanExecute需要快速。检查数据库,打网络服务等在这里不是一个好主意。只有当用户准备好提交更改时,才应该检查数据库。 – 2009-10-25 15:15:07