11
votes

Listbox.scrollintoView () ne semble pas fonctionner dans WP7

Je veux déplacer la barre de défilement ListBox en bas chaque fois qu'un nouvel élément est ajouté à l'itemSource, mais ScrollINToView () code> ne semble rien faire si je le transmet par une référence à la article nouvellement ajouté, ou l'index de celui-ci. Quelqu'un a-t-il eu ceci pour travailler ou avoir d'autres suggestions sur la manière dont je pourrais faire défiler la liste de liste en bas?

Certains code: P>

    void Actions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        //if a new item was added, set it to the selected item
        if (e.NewItems != null)
        {
            MainListBox.SelectedIndex = e.NewStartingIndex;

            //MainListBox.ScrollIntoView(MainListBox.Items.Last());     //todo: this doesnt seem to work
        }
    }


0 commentaires

4 Réponses :


3
votes

ScrollINTOView code> fonctionne définitivement. Je viens d'ajouter un bouton d'application à une application de données vide et effectuant le bouton suivant sur le bouton Cliquez sur la liste de défilement.

MainListBox.ScrollIntoView(MainListBox.Items.Last());


3 commentaires

Salut Matt, où vient la méthode de la méthode .Last ()? J'ajoute un nouvel article à ma collection et je ne suis pas au courant de l'index - je n'ai pas cette méthode sur mes articles de classe?


@Rodney .Last () est une méthode d'extension sur iEnumerable dans system.linq


lb.scrollinView (lb.items [lb.items.count-1]) fonctionne aussi. Je ne connais pas les contrats sur itemcollection , mais je ferais une supposition éduquée que la méthode d'extension .Last () serait O (n) et l'indexation directe serait O (1) Si la collection a gardé une trace du nombre d'éléments. Je pourrais totalement avoir tort à ce sujet, et .Last () est clairement moins sujet aux fautes de frappe.



35
votes

MSDN dit:

Lorsque le contenu de la collecte d'élémentsSource change, en particulier si de nombreux éléments sont ajoutés ou supprimés de la collection, vous devrez peut-être appeler UpdateLayout () avant d'appeler ScrollINTOView pour faire défiler l'élément spécifié dans la fenêtre.

Cela pourrait-il être votre problème?


1 commentaires

Parfait! Cela corrigé-le. Merci tass :)



5
votes

C'est la réponse:

http: //dotnet-experience.blogspot. com.es/2010/12/wpf-listview-scrollinView.html

En quelques mots: Les éléments sont chargés dans la liste de liste de manière asynchrone, donc si vous appelez ScrollINToView () dans l'événement de collectionChanged (ou similaire), il n'aura pas encore d'éléments, donc pas de défilement.

J'espère que cela aide, cela m'a sûrement aidé! ; -)


1 commentaires

Pour les applications MVVM, c'est la vraie réponse



-2
votes

Vous pouvez insérer le nouvel élément toujours en haut par

Youritemlist.insert (0, article);

Ainsi pas besoin de ScrollItoView. Peut-être cela aidera !!


0 commentaires