Reperire selezioni da ListView

di il
2 risposte

Reperire selezioni da ListView

Ciao a tutti,
sto progettando un software di gestione magazzino in cui utilizzo le ListView (System.Windows.Controls) attraverso WPF e la tecnica del Binding. Se imposto la multiselezione per le ListView non riesco poi a recuperare quali degli elementi sono selezionati e quali no.

Attraverso ListView.SelectedItems dovrei ottenere un oggetto Collection il quale contiene il riferimento ai selezionati, ebbene non riesco a leggere o visionare gli elementi di questa collection. Se provo a fare un cast in una List ottengo errore. Unica cosa che riesco ad ottenere, tramite la proprietà Count è il numero degli oggetti della ListView che l'utente ha selezionato...ma io ho bisogno di eseguire delle operazioni successive su ognuno degli elementi selezionati ed ho bisogno di individuarli.

A livello binding essi sono legati tramite ListView.ItemSource assegnata ad una ulteriore lista di oggetti di cui posso scorrere gli elementi tramite indice, ma come detto sopra non riesco a capire come ottenere quali di essi sono stati selezionati tramite la ListView.


Grazie!

2 Risposte

  • Re: Reperire selezioni da ListView

    Prova a caricare gli elementi in una SelectedListViewItemCollection , qui un esempio https://docs.microsoft.com/it-it/dotnet/api/system.windows.forms.listview.selectedlistviewitemcollection?view=net-5.0
  • Re: Reperire selezioni da ListView

    Non so se funziona anche in WPF, questo è un mio codice che legge le celle cliccate, ma è di un programma che ho scritto in WindowsForm...
    
           private void listView1_MouseDown(object sender, MouseEventArgs e)
            {
                // tutte le info del punto cliccato
                ListViewHitTestInfo info = listView1.HitTest(e.Location);
                if (info.Item == null)
                {
                    labInfo.BackColor = Color.Red;
                    labInfo.ForeColor = Color.White;
                    labInfo.Text = "clicca nello schema";
                }
                else
                {
                    ListViewItem item = info.Item; 
                    listView1.Items[riga].SubItems[colonna].BackColor = Color.White; // ripristino il colore
                    colonna = item.SubItems.IndexOf(info.SubItem); // la colonna cliccata
                    if (colonna == 0)
                    {
                        labInfo.BackColor = Color.Red;
                        labInfo.ForeColor = Color.White;
                        labInfo.Text = "clicca nello schema";
                        riga = 0;
                        return;
                    }
                    else
                    {
                        riga = item.Index; // la riga cliccata
                        labInfo.BackColor = Color.Transparent;
                        labInfo.ForeColor = Color.Black;
                        labInfo.Text = "Cambia il valore in: R" + (riga + 1).ToString("00") + " - C" + colonna.ToString("00");
                        texValore.Text = info.SubItem.Text; // cosa c'è scritto nella cella cliccata
                        listView1.Items[riga].SubItems[colonna].BackColor = Color.Yellow;
                    }
                }
            }
    

    Listview.gif
    Listview.gif


    EDIT: il codice che ti ho proposto in WPF non funziona...
    Ci sono vari approci per fare la stessa cosa in WPF:
    https://www.technical-recipes.com/2018/handling-mouse-event-commands-in-listview-controls-in-wpf-mvvm/
Devi accedere o registrarti per scrivere nel forum
2 risposte