Commands
RadWizard provides a set of built-in commands that enables you to easily handle the User Interface actions, but still make your logic independent of the UI layout.
All supported commands are defined in the RadWizardCommands class and are listed below:
- Cancel
- Finish
- Help
- MoveCurrentToPrevious
- MoveCurrentToNext
Using The RadWizardCommands
In order to utilize the built-in RadWizard commands, you can set them directly to the Command property of a button. Thus, once you click the button, the predefined command will be executed.
There are two major scenarios to define a RadButton – inside and outside RadWizard. The wizard namespace definition is as follows:
Definition of the namespace needed to use the built-in commands of RadWizard
xmlns:wizard="clr-namespace:Telerik.Windows.Controls.Wizard;assembly=Telerik.Windows.Controls.Navigation"
Example 1: Demonstrates how you can use the built-in commands inside RadWizard
<telerik:WizardPage.FooterTemplate>
<DataTemplate>
<telerik:RadButton Content="Back"
Width="70" Height="25"
Command="wizard:RadWizardCommands.MoveCurrentToPrevious"
CommandParameter="{Binding}"/>
</DataTemplate>
</telerik:WizardPage.FooterTemplate>
The other approach is to define the RadButton beyond the boundaries of RadWizard.
Example 2: Demonstrates how you can use the built-in commands outside RadWizard
<telerik:RadButton Content="Back"
Width="70"
Height="25"
Command="wizard:RadWizardCommands.MoveCurrentToPrevious"
CommandTarget="{Binding ElementName=myWizard}" />
Execute RadWizardCommands Programmatically
All RadWizardCommands are of type RoutedUICommand. So, for example, you may easily handle the Click event of a button, and execute your command. However, when invoking the command in such a manner a second parameter should be added, pointing out the target UI Element as shown in Exapmle 3.
Example 3: Executing wizard command from code behind
private void RadButton_Click(object sender, RoutedEventArgs e)
{
var moveCurrentToNextCommand = RadWizardCommands.MoveCurrentToNext as RoutedUICommand;
moveCurrentToNextCommand.Execute(null, this.wizard);
}
Custom CommandProvider
RadWizard also exposes a CommandProvider property, which allows you to customize the behavior of the commands in an MVVM-friendly way. Each of the commands listed in the beginning of the article can be customized by overriding its corresponding Execute/CanExecute method. Examples 3 and 4 demonstrate a custom CommandProvider implementation.
Example 4: Creating a custom WizardCommandProvider
public class CustomCommandProvider : WizardCommandProvider
{
public CustomCommandProvider() : base(null)
{
}
public CustomCommandProvider(RadWizard wizard) : base(wizard)
{
}
protected override void Finish()
{
if (MessageBox.Show("Are you sure?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.No)
{
// prevent finish
}
else
{
base.Finish();
}
}
}
Public Class CustomCommandProvider
Inherits WizardCommandProvider
Public Sub New()
MyBase.New(Nothing)
End Sub
Public Sub New(ByVal wizard As RadWizard)
MyBase.New(wizard)
End Sub
Protected Overrides Sub Finish()
If MessageBox.Show("Are you sure?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning) = MessageBoxResult.No Then
' prevent finish
Else
MyBase.Finish()
End If
End Sub
End Class
Example 5: RadWizard with custom CommandProvider implementation
<Grid>
<Grid.Resources>
<local:CustomCommandProvider x:Key="CommandProvider"/>
</Grid.Resources>
<telerik:RadWizard CommandProvider="{StaticResource CommandProvider}">
<telerik:RadWizard.WizardPages>
<telerik:WizardPage ButtonsVisibilityMode="All" NextButtonContent="Continue" CancelButtonContent="Stop">
<TextBox Text="Wizard Page 1" />
</telerik:WizardPage>
<telerik:WizardPage ButtonsVisibilityMode="Cancel,Finish" NextButtonContent="Finish" CancelButtonContent="Stop">
<TextBlock Text="Wizard Page 2" />
</telerik:WizardPage>
</telerik:RadWizard.WizardPages>
</telerik:RadWizard>
</Grid>