The recording of the first ever ReactiveUI virtual conference is available on our YouTube Channel.



Prefer binding user interactions to commands rather than methods.


// In the view
this.BindCommand(ViewModel, vm => vm.Delete, v => v.deleteButton);

public class RepositoryViewModel : ReactiveObject
  public RepositoryViewModel() 
    Delete = ReactiveCommand.CreateFromObservable(x => DeleteImpl());
    Delete.ThrownExceptions.Subscribe(ex => /*...*/);

  public ReactiveAsyncCommand Delete { get; private set; }

  public IObservable<Unit> DeleteImpl() {...}


Use the Caliburn.Micro conventions for associating buttons and commands:

// In XAML
<Button x:Name="Delete" .../>

public class RepositoryViewModel : PropertyChangedBase
  public void Delete() {...}    


  • ReactiveCommand exposes the CanExecute property of the command to enable applications to introduce additional behaviour.
  • It handles marshaling the result back to the UI thread.
  • It tracks in-flight items.