Nello script 17 abbiamo introdotto l'utilizzo della charm di ricerca come strumento attraverso cui immettere del testo per cercare informazioni in una app.
La charm di ricerca supporta anche la possibilità di visualizzare una serie di chiavi di ricerca suggerite, relative in qualche modo al testo immesso dall'utente; possiamo implementare anche nelle nostre app questa funzionalità registrandosi all'evento SuggestionsRequested di SearchPane.
Tale evento si scatena al cambiamento del testo di ricerca, il momento corretto in cui registrarsi è nell'override di OnWindowCreated direttamente nella classe App.
protected override void OnWindowCreated(WindowCreatedEventArgs wargs) { base.OnWindowCreated(wargs); var searchPane = SearchPane.GetForCurrentView(); searchPane.SuggestionsRequested += async (SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args) => { string[] suggestions = { "AAA", "AAABBB", "AAACCC", "AAADDD", "EEE", "FFF", "GGG", "HHH", "III", "JJJ", "KKK", "LLL", "MMM", "NNN", "OOO", "PPP", "QQQ" }; foreach (string suggestion in suggestions) { if (suggestion.StartsWith(args.QueryText, StringComparison.CurrentCultureIgnoreCase)) { args.Request.SearchSuggestionCollection.AppendQuerySuggestion(suggestion); } if (args.Request.SearchSuggestionCollection.Size >= 5) break; } }; }
Con:
var searchPane = SearchPane.GetForCurrentView();
recuperiamo il riferimento, per così dire, alla charm. Attraverso SearchPaneSuggestionsRequestedEventArgs possiamo recuperare il testo immesso dall'utente e soprattutto possiamo aggiungere alla collezione SearchSuggestionCollection l'occorrenza del 'suggerimento' relativo con il metodo AppendQuerySuggestion.
Nell'esempio la collezione delle chiavi 'suggeribili' è cablato nel codice così come la logica di check è un semplice StartsWith, è molto più realistico che questi siano esposti attraverso un servizio e che esso possa aggiungere altre logiche di relazione.
Per questo scenario dobbiamo adattare leggermente il codice al modello asincrono dell'accesso ad un servizio, attraverso il metodo GetDeferral:
protected override void OnWindowCreated(WindowCreatedEventArgs wargs) { base.OnWindowCreated(wargs); var searchPane = SearchPane.GetForCurrentView(); searchPane.SuggestionsRequested += async (SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args) => { var deferral = args.Request.GetDeferral(); try { string[] suggestions = await DataService.GetSuggestions(); foreach (string suggestion in suggestions) { if (suggestion.StartsWith(args.QueryText, StringComparison.CurrentCultureIgnoreCase)) { args.Request.SearchSuggestionCollection.AppendQuerySuggestion(suggestion); } if (args.Request.SearchSuggestionCollection.Size >= 5) break; } } finally { deferral.Complete(); } }; } public class DataService { public static async Task<string[]> GetSuggestions() { await Task.Delay(3000); string[] suggestions = { "AAA", "AAABBB", "AAACCC", "AAADDD", "EEE", "FFF", "GGG", "HHH", "III", "JJJ", "KKK", "LLL", "MMM", "NNN", "OOO", "PPP", "QQQ" }; return suggestions; } }
L'ultima accortezza da avere è richiamare il metodo deferral.Complete(); al termine del processo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Bloccare una pull request che arriva da branch non definiti in GitHub
Modernizzare le applicazioni WPF e Windows Forms con Blazor
Blazor PWA e Offline-First
Pubblicare un pacchetto di NuGet nel feed di GitHub
Chiamare un endpoint ASP.NET Core protetto da Certificate Authentication
Ottenere il riferimento alla finestra che ha aperto un'altra finestra con HTML5 e JavaScript
Sfruttare i tag nell'output cache di ASP.NET Core 7
Ottimizzare il codice JavaScript utilizzando WeakMap e WeakSet
Personalizzare le richieste con i rule set di Azure Front Door
Elencare le container images installate in un cluster di Kubernetes
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
I più letti di oggi
- .NET Conference Italia 2022 - Milano e Online
- Visual Studio 2019 sarà disponibile a partire dal 2 Aprile
- Windows Phone 8.1 Day - Milano
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- ASP.NET 3.5 Extensions in beta la settimana prossima
- ASPItalia.com Future Web Conference: 15 gennaio 2008, L'Aquila
- Rilasciata la CTP Preview di ASP.NET 3.5 Extensions
- Tutto per portare Visual Studio 2015, ASP.NET 5 e Windows 10 sotto l'ombrellone!
- Real Code Day 4.0: costruire applicazioni reali - Firenze
- Tutto per portarsi il .NET Framework 3.5 sotto l'ombrellone