Nell’MVVM si usa l’interfaccia ICommand
per prendere un particolare evento e portarlo nel ViewModel
.
Il problema è che spesso non tutti gli eventi sono supportati, per esempio nel Button
è supportato il Click
ma se voglio fare un evento sul LostFocus
di una TextBox
(esempio) non ho modo di passare quell’evento al ViewModel
.
Per risolvere ci sono due metodi
Sfruttare il cambio di una property bindata
Questo è il classico caso di eventi che si triggerano se qualcosa cambia: per esempio per prendere l’evento di CheckedChanged
di un Checkbox
posso bindarmi alla property IsChecked
e sfruttare, code behind, il metodo partial che si triggera quando questa property viene cambiata (metodo che viene generato con il pacchetto CommunityToolkit.Mvvm
).
Esempio questa è la property nello XAML
e nel ViewModel
avrò
Pacchetto nuget Microsoft.xaml.behaviors
Questo pacchetto permette di far diventare Command
qualsiasi evento.
Vediamo, per esempio, il codice per avere come Command
l’evento di LostFocus
:
EventName
: nome dell’evento dell’UserControl
che voglio utilizzareInvokeCommandAction
: oggetto che lancia il comando passato inCommand
, comando presente nelViewModel
.
Con questo pacchetto è possibile anche bindarmi agli eventi del mouse che riguardano l’oggetto, per esempio se come EventName
scrivo MouseLeftButtonDown
posso avere un command che si triggera quando l’utente clicca con il mouse sull’UserControl
.