public class ViewModel { public DelegateCommandMyCommand { get; } public ObservableCollection MyItems { get; } public ViewModel() { MyItems = new ObservableCollection (); MyCommand = new DelegateCommand (ExecuteCommand, CanExecuteCommand) .ObservesCanExecute(() => SelectedItem); } private MyItemType _selectedItem; public MyItemType SelectedItem { get { return _selectedItem; } set { _selectedItem = value; MyCommand.RaiseCanExecuteChanged(); } } private bool CanExecuteCommand(MyItemType item) { return item != null && item.IsEnabled; } private void ExecuteCommand(MyItemType item) { // execute the command with the selected item } }
public class ViewModel { public DelegateCommand MyCommand { get; } public bool MyCondition { get; set; } public ViewModel() { MyCommand = new DelegateCommand(ExecuteCommand, CanExecuteCommand) .ObservesCanExecute(() => MyCondition); } private bool CanExecuteCommand() { return MyCondition; } private void ExecuteCommand() { // execute the command } }In this example, the `MyCommand` is a `DelegateCommand` without any generic type parameter. The command can only be executed if the `MyCondition` property of the view model is true. By calling `ObservesCanExecute(() => MyCondition)` on the command, the command is notified whenever the `MyCondition` property changes, allowing it to update its CanExecute status. Package library: Prism.Core (for versions 6.3.0 and later)