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
Analizzare il contenuto di una issue con GitHub Models e AI
Utilizzare Containers in .NET Aspire
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Scrivere selettori CSS più semplici ed efficienti con :is()
Ridimensionamento automatico input tramite CSS
Gestire gli errori nelle Promise JavaScript con try()
Abilitare il rolling update su Azure Functions flex consumption
Supportare la crittografia di ASP.NET Core con Azure Container App
Recuperare gli audit log in Azure DevOps
Managed deployment strategy in Azure DevOps
Semplificare i deployment con le label in Azure Container App
La gestione della riconnessione al server di Blazor in .NET 9
I più letti di oggi
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Sfruttare una CDN con i bundle di ASP.NET


