Technology Experience
.NET World

Un pizzico di Linq nel mio Technorati plug-in

La cosa più bella nello sviluppare piccole applicazioni opensource/freeware in autonomia è quella di poter cogliere l’occasione per studiare le nuove tecnologie, o i nuovi strumenti che i nuovi framework ci danno. Per esempio, ecco la schermata del mio WPF Technorati Plug-in for Windows Live Writer:

Assumiamo che la ListBox a sinistra sia popolata con una semplice List<string>. Tale lista di stringhe viene ritornata dal web-service di Technorati, che ci restituisce per l’appunto i primi 100 tags utilizzati su un determinato blog.

La nuova funzionalità che ho aggiunto permette all’utente di filtrare l’elenco dei tags per trovare quello che vuole aggiungere: invece di scorrere a mano i 100 tags, può scrivere parte della parola nella TextBox indicata dalla Label Tags Filter. Questo è stato realizzato in Linq:

1 void filterTagsTextBox_TextChanged(object sender, TextChangedEventArgs e) 2 { 3 string filter = filterTagsTextBox.Text; 4 5 if (!string.IsNullOrEmpty(filter)) 6 { 7 IEnumerable<string> filtered = Enumerable.Where 8 (_tagsList, n => n.ToLower().Contains(filter.ToLower())); 9 _filteredTags = new List<string>(filtered); 10 tagsListBox.ItemsSource = _filteredTags; 11 } 12 else 13 { 14 tagsListBox.ItemsSource = _tagsList; 15 } 16 17 foreach (string s in _selectedTags) 18 tagsListBox.SelectedItems.Add(s); 19 }

Alla linea 5 controllo se l’utente ha effettivamente indicato un filtro: se no, imposto la proprietà ItemsSource della ListBox al membro privato della classe _tagsList, che è la List<string> di cui parlavo prima, quella ritornata da Technorati.

Se invece l’utente ha indicato un filtro, ottengo un’istanza di IEnumerable<string> filtrata usando Linq:

IEnumerable<string> filtered = Enumerable.Where(_tagsList, n => n.ToLower().Contains(filter.ToLower()));

Con una sola riga ottengo il risultato voluto. Notare che uso il metodo ToLower(), per non fare differenza tra maiuscole/minuscole. Uso il metodo Contains(), così quello che scrivete nella TextBox viene cercato all’interno della stringa: può essere all’inizio, alla fine oppure in mezzo.

Alla linea 9 creo una nuova List<string> che viene riassegnata come ItemsSource della ListBox ed il gioco è fatto.

Alla linea 17 e 18 mi occupo di riselezionare via codice gli eventuali tags selezionati prima di applicare il filtro: cambiando ItemsSource, perdo tutti i SelectedItems, per cui devo andare a rimetterli io manualmente via codice.

Technorati Tags:   

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.