在演示中,我有一個按鈕來切換布爾字段isAsking
。我創建了一個只有在isAsking==true
時才能執行的命令。何時調用CanExecute?
一旦我按下切換按鈕,okButton.IsEnable
立即變化,這表示命令發現變化isAsking
。
我覺得很困惑,爲什麼命令對象會注意到字段的變化,當調用CanExecute
?
雖然寫了一段時間的WPF應用程序,但我是WPF Command的新手。請給出一個解釋,如果可能的話,指出一些相關的文章或博客(我已經閱讀了太多關於剪切/粘貼命令的文章)。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.MainWindow"
Title="MainWindow" Height="350" Width="525" x:Name="mainWindow" >
<StackPanel>
<Button Name="okButton" Content="Ok" />
<Button Content="Toggle" Click="Button_Click_1"/>
</StackPanel>
</Window>
代碼隱藏:
public partial class MainWindow : Window
{
private bool isAsking;
public MainWindow()
{
InitializeComponent();
CommandBinding cb = new CommandBinding();
cb.Command = okCommand;
cb.CanExecute += CanOKExecute;
cb.Executed += cb_Executed;
mainWindow.CommandBindings.Add(cb);
okButton.Command = okCommand;
}
private RoutedCommand okCommand = new RoutedCommand("ok", typeof(MainWindow));
void cb_Executed(object sender, ExecutedRoutedEventArgs e)
{
}
void CanOKExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = isAsking;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
isAsking = !isAsking;
}
}
I對這種默認行爲有點驚駭。如果一個表單有很多控件,並且CanExecute方法寫得不是最佳的,那麼這是一個非常大的可能無用的CanExecute評估,不是嗎?無法看到架構如何擴展? – Shiv