2009-10-25 107 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