我已经将一个IRC库移植到WinRT(它支持很多RFC 1459和少量2812),现在我尝试使用它。
作为IRC消息的视图,我选择了ListView(不知道这是否是一个好主意)和RichTextBlock作为项目。
我正在使用可观察集合来存储传入的消息(一个类)。它绑定得很好,甚至在新消息到达时滚动到底部(感谢 Marco Minerva 的行为!
我还确定我需要将集合保持在某个限制(例如 100 条消息)。因此,如果达到计数器,我在集合中使用 RemoveAt(0)。
问题是,当 RemoveAt 通知列表视图时,它会跳到消息列表的中心(而不是底部)。
我做错了什么吗?
谢谢!
解决方案是:
collection.CollectionChanged += (s, args) =>
{
var scrollViewer = behavior.AssociatedObject.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer.UpdateLayout();
scrollViewer.Measure(scrollViewer.RenderSize);
scrollViewer.ChangeView(0, scrollViewer.ScrollableHeight, scrollViewer.ZoomFactor, false);
};