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 il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Effettuare il refresh dei dati di una QuickGrid di Blazor
Eseguire script pre e post esecuzione di un workflow di GitHub
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Utilizzare il trigger SQL con le Azure Function
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Cancellare una run di un workflow di GitHub
Scrivere selettori CSS più semplici ed efficienti con :is()
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Escludere alcuni file da GitHub Secret Scanning
Evitare (o ridurre) il repo-jacking sulle GitHub Actions