I know it's a bit late but, Microsoft has made their Xaml.Behaviors open source and it's now much easier to use interactivity with just one namespace.
- First add Microsoft.Xaml.Behaviors.Wpf Nuget packge to your project.
https://www.nuget.org/packages/Microsoft.Xaml.Behaviors.Wpf/ - add xmlns:behaviours="http://schemas.microsoft.com/xaml/behaviors" namespace to your xaml.
Then use it like this,
<Button Width="150" Style="{DynamicResource MaterialDesignRaisedDarkButton}"> <behaviours:Interaction.Triggers> <behaviours:EventTrigger EventName="Click"> <behaviours:InvokeCommandAction Command="{Binding OpenCommand}" PassEventArgsToCommand="True"/> </behaviours:EventTrigger> </behaviours:Interaction.Triggers> Open </Button> PassEventArgsToCommand="True" should be set as True and the RelayCommand that you implement can take RoutedEventArgs or objects as template. If you are using object as the parameter type just cast it to the appropriate event type.
The command will look something like this,
OpenCommand = new RelayCommand<object>(OnOpenClicked, (o) => { return true; }); The command method will look something like this,
private void OnOpenClicked(object parameter) { Logger.Info(parameter?.GetType().Name); } The 'parameter' will be the Routed event object.
And the log incase you are curious,
2020-12-15 11:40:36.3600|INFO|MyApplication.ViewModels.MainWindowViewModel|RoutedEventArgs
As you can see the TypeName logged is RoutedEventArgs
RelayCommand impelmentation can be found here.
PS : You can bind to any event of any control. Like Closing event of Window and you will get the corresponding events.