【问题标题】:Auto-scrolling a Listview in WP8.1 results in a refresh animation在 WP8.1 中自动滚动 Listview 会导致刷新动画
【发布时间】:2014-04-22 18:10:18
【问题描述】:

我正在为 WP8.1 创建一个新的通用应用程序,但在使用 Hub 控件内的 ListView 时遇到了一些困难。

此 ListView 绑定到聊天消息的 ObservableCollection,并且此 ObservableCollection 会定期使用新消息进行更新。每次更新时,我都会滚动到 ListView 的底部。现在,我通过以下方式完成此操作:

this.vm.Messages.Add(new Message() { Body="Test Message", MateName="Test User", SendTime=DateTimeOffset.UtcNow });
list_messages.ScrollIntoView(this.vm.Messages.Last());

list_messages 是 ListView,其中 ItemsSource 绑定到 this.vm.Messages

用图片展示什么结果有点困难;列表滚动到底部,但所有项目再次淡入,就像整个列表正在刷新一样。

当一个新项目被添加到列表的末尾时,这是一个进展:

如果只是 /last/ 项目消失了,那就太好了……但整个列表似乎都在刷新。这里可能出了什么问题?

这里是基本 XAML 的简要说明。

<ListView
    x:Uid="list_messages"
    x:Name="list_messages"
    Margin="12,-12,6,0"
    ItemsSource="{Binding}"
    HorizontalContentAlignment="Stretch" Loaded="list_messages_Loaded">
    ...
    <ListView.ItemTemplate>
        <DataTemplate>
            <ListViewItem> Textblock w/ bindings, etc. </ListViewItem>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

【问题讨论】:

  • 某些东西可能会引发 Messages 属性的 OnPropertyChanged 事件。在属性上设置断点,看看添加消息时是否断点。
  • 确实如此,我发现在调用此方法时会重新绘制整个项目。我的数据模板中有一个自定义内容展示器,当调用 ScrollIntoView(items.Last()) 时,所有内容展示器的构造函数都会被再次调用。我建议您创建一个自定义列表视图,在其中检索滚动查看器,因此您可以滚动到垂直偏移,您的问题就解决了。

标签: c# listview windows-runtime winrt-xaml windows-phone-8.1


【解决方案1】:

据我了解,你可以试试这个:Perfect ListView

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多