2 Stimmen

Wie bringe ich das letzte Element zu einer gebundenen ObservableCollection hinzugefügt BringToView

Ich habe ein Silverlight-Steuerelement (View), das eine Liste von Elementen in einer bestimmten Eigenschaft des Datentexts (viewmodel) anzeigt.

Was ich brauche, ist für die scrollviewer in meinem Steuerelement an den Anfang oder das Ende, je nachdem, wo das neueste Element der Liste hinzugefügt wurde blättern. (Es wird immer entweder der Anfang oder das Ende der Liste sein, ich brauche nicht über Mitte der Liste Einfügungen zu kümmern).

In WPF würde ich einfach das DataContextChanged-Ereignis verwenden, um auf das Viewmodel zu hören, aber in Silverlight ist dieses Ereignis intern.

Haben Sie eine Idee, wie Sie das Problem angehen können?

1voto

Doug Ferguson Punkte 2458

Eine gute Ausgangsbasis ist Angehängte Verhaltensweisen auf CodeProject .

Ein nützliches Verhalten würde die ListBox.ItemsSource beobachten und an die beobachtbare Sammlung anhängen, wenn sie gesetzt ist. Verwenden Sie ListBox.ScrollIntoView beim Ereignis "Sammlung geändert", um das geänderte Element anzuzeigen.

0voto

Graeme Bradbury Punkte 3673

Ich kann das CollectionChangedEvent von ObservableCollection nicht verwenden, da ich das DataContextChanged-Ereignis benötige, um den DataContext zu erhalten, der die Sammlung in erster Linie enthält.

0voto

Ray Booysen Punkte 26896

Würden Sie dies nicht im ViewModel tun?

Unabhängig davon, welches ViewModel die ObservableCollection hat, stellen Sie eine Eigenschaft vom Typ T mit dem Namen SelectedItem zur Verfügung. Immer wenn sich die ObservableCollection mit einem neuen Element ändert, können Sie über das CollectionChanged-Ereignis die SelectedItem-Eigenschaft festlegen. Sobald dies geschehen ist, verbinden Sie das SelectedItem im Steuerelement mit dieser Eigenschaft in Ihrem ViewModel.

Dies funktioniert natürlich nur mit Steuerelementen wie ListBox, bei denen eine SelectedItem-Eigenschaft vorhanden ist.

-1voto

Jobi Joy Punkte 47482

Anstelle von DataContextChanged in WPF, können Sie CollectionChanged Ereignis von ObservableCollection verwenden. In der Sammlung geändert erhalten Sie den NewItem Index kennen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X