Je veux déplacer la barre de défilement ListBox en bas chaque fois qu'un nouvel élément est ajouté à l'itemSource, mais Certains code: P> 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?
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
}
}
4 Réponses :
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());
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 () code> est une méthode d'extension sur iEnumerable
lb.scrollinView (lb.items [lb.items.count-1]) code> fonctionne aussi. Je ne connais pas les contrats sur
itemcollection code>, mais je ferais une supposition éduquée que la méthode d'extension
.Last () code> 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 () code> est clairement moins sujet aux fautes de frappe.
MSDN dit: P>
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. p>
Cela pourrait-il être votre problème? P>
Parfait! Cela corrigé-le. Merci tass :)
C'est la réponse: p>
http: //dotnet-experience.blogspot. com.es/2010/12/wpf-listview-scrollinView.html p>
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. P>
J'espère que cela aide, cela m'a sûrement aidé! ; -) p>
Pour les applications MVVM, c'est la vraie réponse
Vous pouvez insérer le nouvel élément toujours en haut par p>
Youritemlist.insert (0, article); p>
Ainsi pas besoin de ScrollItoView. Peut-être cela aidera !! p>