Nella demo, ho un pulsante per attivare o disattivare un campo bool isAsking
. Creo un comando che può essere eseguito solo quando isAsking==true
.Quando viene chiamato CanExecute?
Dopo aver premuto il pulsante di commutazione, le modifiche immediatamente indicano che il comando trova la modifica di isAsking
.
Mi sento molto confuso perché l'oggetto comando rileva la modifica di un campo, quando verrà chiamato CanExecute
?
Anche se si scrive un'applicazione WPF per qualche tempo, sono nuovo al comando WPF. Si prega di fornire una spiegazione a questo caso e, se possibile, indicare alcuni articoli o blog correlati (ho già letto troppi articoli che parlano del comando taglia/incolla).
<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>
Codice-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;
}
}
I Sono un po 'inorridito da questo comportamento predefinito. Se un modulo ha molti controlli e i metodi CanExecute sono scritti in modo subottimale, questa è una quantità orribilmente grande di valutazioni CanExecute potenzialmente inutili no? Hai difficoltà a vedere come scala l'architettura? – Shiv