Quando o CanExecute é chamado?
Na demonstração, tenho um botão para alternar um campo de boolisAsking
. Eu crio um comando que só pode ser executado quandoisAsking==true
.
Depois de pressionar o botão de alternância,okButton.IsEnable
muda imediatamente, o que indica que o comando encontra a mudança deisAsking
.
Eu me sinto muito confuso porque o objeto de comando percebe a mudança de um campo, quandoCanExecute
será chamado?
Apesar de escrever o aplicativo WPF há algum tempo, sou novo no WPF Command. Por favor, dê uma explicação para este caso e, se possível, aponte alguns artigos ou blogs relacionados (eu já li muitos artigos falando sobre o comando cortar / colar).
<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>
Código por trás:
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;
}
}