Windows Phone。 ObservableCollection 作为聊天应用程序中 ListView 的来源

Windows Phone. ObservableCollection as a source for ListView in Chat application

我已经将一个 IRC 库移植到 WinRT(它支持大量的 RFC 1459 和少量的 2812),现在我尝试使用它。

作为 IRC 消息的视图,我选择了 ListView(不知道这是否是个好主意)和 RichTextBlock 作为项目。

我正在使用 ObservableCollection 来存储传入消息 (a class)。 它绑定得很好,甚至在新消息到达时滚动到底部(感谢 Marco Minerva 的行为!)。

我还确定我需要将集合保持在一定的限度内(例如 100 条消息)。因此,如果达到计数器,我在收集时使用 RemoveAt(0)。

问题是,当 RemoveAt 通知 ListView 时,它会跳到消息列表的中心(而不是底部)。

我是不是做错了什么?

谢谢!

解决方法是:

collection.CollectionChanged += (s, args) =>
            {
                var scrollViewer = behavior.AssociatedObject.GetFirstDescendantOfType<ScrollViewer>();
                scrollViewer.UpdateLayout();
                scrollViewer.Measure(scrollViewer.RenderSize);
                scrollViewer.ChangeView(0, scrollViewer.ScrollableHeight, scrollViewer.ZoomFactor, false);
            };