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
Migrare una service connection a workload identity federation in Azure DevOps
Definire stili a livello di libreria in Angular
Evitare la script injection nelle GitHub Actions
Potenziare Azure AI Search con la ricerca vettoriale
Implementare l'infinite scroll con QuickGrid in Blazor Server
Creazione di componenti personalizzati in React.js con Tailwind CSS
Creare alias per tipi generici e tuple in C#
Utilizzare la libreria Benchmark.NET per misurare le performance
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Sfruttare al massimo i topic space di Event Grid MQTT
Sfruttare lo streaming di una chiamata Http da Blazor
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
I più letti di oggi
- Miglioramenti nelle performance di Angular 16
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- HTML5 con CSS e JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)