DelegateCommand<T> Class
A delegate command that implements the ICommand interface and calls your parameterized delegates when Execute and CanExecute logic is invoked on the command.
Namespace: DevExpress.Mvvm
Assembly: DevExpress.WinUI.Mvvm.v23.2.dll
NuGet Package: DevExpress.WinUI
#Declaration
#Type Parameters
Name | Description |
---|---|
T | A command parameter type. |
#Remarks
Delegate commands implement the ICommand interface and allow you to create commands in a ViewModel. A delegate command calls methods (delegates) that you assign to the command when the command’s Execute and CanExecute logic is invoked.
DevExpress WinUI MVVM Framework also includes the DelegateCommand class that is the parameterless version of delegate commands.
#Create Delegate Commands
The DelegateCommand<T>
and DelegateCommand classes contain constructors that accept Execute delegate and optional CanExecute delegate parameters.
The following code sample creates delegate commands that call the MessageBoxService.ShowAsync method:
public class DelegateCommandsViewModel : ViewModelBase {
public IMessageBoxService MessageBoxService => GetUIService<IMessageBoxService>();
public DelegateCommand DelegateCommand1 { get; }
public DelegateCommand<string> DelegateCommand2 { get; }
public DelegateCommandsViewModel() {
DelegateCommand1 = new DelegateCommand(
execute: () => MessageBoxService.ShowAsync("This is a DelegateCommand"));
DelegateCommand2 = new DelegateCommand<string>(
execute: x => MessageBoxService.ShowAsync(x),
canExecute: x => !string.IsNullOrEmpty(x));
}
}
#Convert Command Parameters
The DelegateCommand<T>
class converts the command argument to the parameterized type if possible.
The following code snippet converts the CommandParameter‘s String value to the type of the DocumentType:
<Button Command="{x:Bind ShowDocumentCommand}" CommandParameter="Text"/>
public enum DocumentType { Text, Data }
public class DelegateCommandsViewModel : ViewModelBase {
public DelegateCommand<DocumentType> ShowDocumentCommand { get; }
public DelegateCommandsViewModel() {
ShowDocumentCommand = new DelegateCommand<DocumentType>(ShowDocument);
}
void ShowDocument(DocumentType parameter) {
if(parameter == DocumentType.Text) {
//...
}
if(parameter == DocumentType.Data) {
//...
}
}
}
#Update Commands
Call the RaiseCanExecuteChanged method to update your commands.
public class DelegateCommandsViewModel : ViewModelBase {
public DelegateCommand GoBackCommand{ get; }
public DelegateCommand GoForwardCommand { get; }
public DelegateCommandsViewModel() {
GoBackCommand = new DelegateCommand(GoBack, CanGoBack);
GoForwardCommand = new DelegateCommand(GoForward, CanGoForward);
}
void GoBack() {
//...
UpdateCommandsState();
}
void GoForward() {
//...
UpdateCommandsState();
}
bool CanGoBack() {
//...
}
bool CanGoForward() {
//...
}
void UpdateCommandsState() {
GoBackCommand.RaiseCanExecuteChanged();
GoForwardCommand.RaiseCanExecuteChanged();
}
}