我有一个ListView,它的目的是显示数据库中的每一个产品,它的工作的大部分,但当我向下滚动拖动滚动条,底部的项目最终是不正确的。
XAML定义:
<ListView x:Name="lst_Products" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="16,124,16,16" Width="300" ContainerContentChanging="lst_Products_ContainerContentChanging" Loaded="lst_Products_Loaded" BorderBrush="Black" BorderThickness="2" CornerRadius="16">
<ListView.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Value}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
数据模板是存在的,所以我可以很容易地用SelectedValue获取产品ID号。根据MSDN论坛上一些受信任的社区成员(或者他们称之为突出海报的任何东西)的说法,这是当ItemsSource
是ObservableCollection<KeyValuePair<int,RelativePanel>>
且具有可选值成员时正确显示ListView
的唯一方法。
相关的C#代码:
第一个
对SQL处理程序的调用只是运行一个SQL查询并返回一个结果列表。如果您需要,我可以发布代码,但我可以向您保证没有进行排序。
A screenshot of what the list looks like. The bottom item should be "Coffee" - Button Test Product 2 is the second item in the list.
A screenshot of the SQL datatable with the "Coffee" product at the bottom where it should be.
在这种情况下,它只是底部的条目不正确,但其他时候它会在底部附近混乱5或6个条目。这似乎只发生在DataTemplate/ContentPresenter中,但如果没有它,RelativePanel就不会在列表中正确显示。最终,列表将显示有关产品的更多信息,据我所知,如果不将SQL数据转换为C#端的RelativePanel,就没有好的方法来实现这一点。
我很乐意接受关于解决模板混乱问题的建议,或者调整xaml,这样我就不需要模板来显示大量sql数据,而不需要模板,但是我很困惑。
1条答案
按热度按时间vvppvyoh1#
c# -当UWP ListView具有DataTemplate时,在快速滚动时显示不正确的项
这个问题应该是由listview virtualization引起的,有两种方法可以解决这个问题,一种是通过将ItemsPanel设置为StackPanel来禁用listview虚拟化,如下所示
另一种方法是为你的模型类实现INotifyCollectionChanged接口。
使用
RelativePanel
集合作为数据源不是一个好的做法,更好的方法是在DataTemplate中创建RelativePanel,并与mode类属性绑定。比如说