none
maschera con due ListView. assegnare il focus su una lista RRS feed

  • Domanda

  • ciao a tutti,

    ho una maschera con due ListView (comunicazioni inviate e ricevute). Voglio fare in modo che il focus sia impostato su una sola delle due liste, e quindi se seleziono un elemento di una lista devo togliere il focus dall'altra.

    Ho provato a mettere il comando UnselectAll sulle procedure di controllo dell'evento SelectionChanged, ma il risultato è un pasticcio, perché se da L1.SelectionChanged lancio L2.UnselectAll, il focus si sposta su  L2.SelectionChanged, e perdo il controllo del flusso (in pratica, per visualizzare l'elemento selezionato devo cliccare due volte).

    qual è il modo corretto di procedere? ci sono altri eventi che posso utilizzare?

    mercoledì 15 giugno 2016 08:40

Risposte

Tutte le risposte

  • il Focus non può essere su più di un oggetto per volta quindi sicuramente se selezioni una lista, l'altra perde il focus.

    Se invece intendi dire che vuoi che la lista che non ha il focus non abbia un elemento selezionato, probabilmente ti basta fare un Lista2.SelectedItems.Clear() dalla Lista1 e viceversa...

    Sempre che io abbia capito cosa ti serve.

    L'evento su cui farlo potrebbe essere un Focused? ma non sono sicura, di solito in WPF si lavora sul Model e non sugli eventi.

    Magari se ci spieghi meglio cosa vuoi ottenere possiamo darti dei lumi maggiori.


    Sabrina C. - http://www.dotnetwork.it

    mercoledì 15 giugno 2016 14:56
  • il Focus non può essere su più di un oggetto per volta quindi sicuramente se selezioni una lista, l'altra perde il focus.

    Se invece intendi dire che vuoi che la lista che non ha il focus non abbia un elemento selezionato, probabilmente ti basta fare un Lista2.SelectedItems.Clear() dalla Lista1 e viceversa...

    Sempre che io abbia capito cosa ti serve.

    L'evento su cui farlo potrebbe essere un Focused? ma non sono sicura, di solito in WPF si lavora sul Model e non sugli eventi.

    Magari se ci spieghi meglio cosa vuoi ottenere possiamo darti dei lumi maggiori.


    ciao,

    quello che vorrei fare è semplicemente avere la selezione su una sola lista, perché ho notato che ogni lista presente nella maschera ha un suo elemento selezionato di default, e questo può generare qualche problema agli utenti. purtroppo non ti posso mandare le schermate, ma credo che il problema sia chiaro.

    questo è il codice che ho associato alle listview_selectionChanged

            Private Sub _LVComRicevute_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
                Dim vm As ComunicazioniWindowViewModel = TryCast(Me.DataContext, ComunicazioniWindowViewModel)
                If vm IsNot Nothing Then
                    ' Set selected item in the view model
                    ComunicazioniControl._LVComInviate.SelectedItem.Clear()
                    vm.SetSelected(ComunicazioniControl._LVComRicevute.SelectedItem)
                End If
            End Sub
    
            Private Sub _LVComInviate_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
                Dim vm As ComunicazioniWindowViewModel = TryCast(Me.DataContext, ComunicazioniWindowViewModel)
                If vm IsNot Nothing Then
                    ComunicazioniControl._LVComRicevute.SelectedItem.Clear()
                    vm.SetSelected(ComunicazioniControl._LVComInviate.SelectedItem)
                End If
            End Sub
    

    il comportamento è anomalo, nel senso che quando clicco su una lista, toglie il focus dall'altra ma non visualizza i dati dell'oggetto selezionato nella maschera. per visualizzarli devo fare due click.

    Ho messo i breakpoint, e ho notato uno strano ping-pong da una lista all'altra, e non riesco a controllarlo come vorrei. spero che possa aiutarmi

    venerdì 17 giugno 2016 08:39
  • Visto che il problema che hai postato è interessante, ho speso un po' di tempo a riprodurlo e risolverlo sia mantenendo un interfaccia a 2 liste che implementando un interfaccia più Semplice e più WPF style con una sola lista.

    Trovi l'esempio con tutti i commenti a questo indirizzo:

    http://blogs.dotnetwork.it/sabrina/blog/come-usare-due-diverse-liste-per-pilotare-un-singolo-dettaglio/

    Sfortunatamente non è in VB perché io scrivo in C#, ma credo sia facilmente convertibile anche con uno di quegli strumenti di conversione automatica che trovi in rete.

    Spero ti possa dare una mano e delle idee.

    Saluti


    Sabrina C. - http://www.dotnetwork.it

    sabato 18 giugno 2016 18:32
  • Visto che il problema che hai postato è interessante, ho speso un po' di tempo a riprodurlo e risolverlo sia mantenendo un interfaccia a 2 liste che implementando un interfaccia più Semplice e più WPF style con una sola lista.

    Trovi l'esempio con tutti i commenti a questo indirizzo:

    http://blogs.dotnetwork.it/sabrina/blog/come-usare-due-diverse-liste-per-pilotare-un-singolo-dettaglio/

    Sfortunatamente non è in VB perché io scrivo in C#, ma credo sia facilmente convertibile anche con uno di quegli strumenti di conversione automatica che trovi in rete.

    Spero ti possa dare una mano e delle idee.

    Saluti

    ciao sabrina,

    grazie per il suggerimento (e per la pazienza). mi sono accorto che c'erano alcuni errori nel mio codice, soprattutto nel popolamento delle listview. con le observablecollection e il binding corretto, ora la maschera funziona bene (anche con l'unselectall).

    grazie ancora.

    martedì 21 giugno 2016 07:19