Wann wird CanExecute aufgerufen?
In der Demo habe ich eine Schaltfläche zum Umschalten eines Bool-FeldesisAsking
. Ich erstelle einen Befehl, der nur wann ausgeführt werden kannisAsking==true
.
Sobald ich die Umschalttaste drücke,okButton.IsEnable
ändert sich sofort, was anzeigt, dass der Befehl die Änderung von findetisAsking
.
Ich bin sehr verwirrt, warum das Befehlsobjekt die Änderung eines Feldes bemerkt, wennCanExecute
wird angerufen werden?
Obwohl ich seit einiger Zeit eine WPF-Anwendung schreibe, bin ich neu in WPF Command. Bitte erläutern Sie diesen Fall und weisen Sie, wenn möglich, auf verwandte Artikel oder Blogs hin (ich habe bereits zu viele Artikel über den Befehl "Ausschneiden / Einfügen" gelesen).
<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>
Code-Behind:
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;
}
}