Applicazioni moderne si basano spesso sul pattern MVVM per il layer di presentazione. Nonostante questo pattern sia conosciuto ormai dalla nascita di WPF, ancora oggi i controlli non offrono un supporto ottimale e necessitano di un po' di lavoro.
Ad esempio nel caso del controllo ListView non è possibile associare un Command da eseguire alla pressione di un elemento: per far questo possiamo usare i Behavior.
In particolare, ci torna utile il Behavior InvokeCommandAction, che permette di associare ad un qualsiasi evento un comando da eseguire. Possiamo convertire gli argomenti dell'evento in qualcosa di utilizzabile per i ViewModel, sfruttando un converter e impostando la proprietà InputConverter esposta dalla classe InvokeCommandAction.
public class ListItemEventArgsConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { var args = value as ItemClickEventArgs; if (args != null) { return args.ClickedItem; } return value; } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } }
Il codice è semplicissimo: il converter recupera l'elemento su cui l'utente ha premuto, attraverso l'oggetto ItemClickEventArgs e, successivamente, viene passato al metodo richiamato dal command.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare EF Core Power Tools per effettuare il reverse engineer di un database
Aggiungere il Microsoft Store come repository per winget
Creare template HTML con Slim
Recuperare la tipologia di contenuto di una stringa con la Universal Windows Platform
A lap around Azure Cognitive Services
Creare due extension method per serializzare un oggetto in JSON e viceversa utilizzando la libreria System.Text.Json
Abilitare l'uso di C# 9 nelle applicazioni Xamarin.Forms
Modificare il behavior del controllo SwipeView in Xamarin Forms
Condividere una variabile tra job in una pipeline YAML di Azure DevOps
Cambiare il DNS da utilizzare negli Azure App Service
Sviluppare applicazioni con supporto al doppio schermo con Xamarin
Rendering di raw HTML in Blazor