带有数据模板的堆栈面板或带有列表项的列表视图之间有什么区别

What's the difference between a stackpanel with datatemplates or a listview with listitems

我正在创建一个使用剩余 api 数据的 WPF 程序。我想在数据上实现延迟加载和无限滚动,并以编程方式创建和添加与此设计非常相似的自定义数据模板或列表项

我只是对采用哪种方法以及 benefits/costs 每个方法提供什么感到困惑

简单的选择:

每个人都使用 MVVM 所以使用 MVVM。

数据模板是 wpf 的基础,不建议在代码中构建 UI - 因此请使用数据模板。

您可以通过将 xaml 构建为字符串来动态地将模板添加到资源中。这是 MS 推荐的构建任何动态 UI 的方法。这些字符串可以来自平面文件、直接数据库或 Web 服务,您可以通过操作 txt 文件或序列化控件来构建它们。

一个巨大的好处是你有标记 "right there"。因此,当事情变成梨形时,您可以粘贴到实验性解决方案中,并在 xaml 中看到错误亮起或查看用户看到的内容。

如果数据类型关联的模板由于某种原因不适合,那么您可以编写一个数据模板选择器并将您的逻辑放在那里。

我不确定您希望它如何准确滚动,但我会使用列表框,一些数据模板与每个视图的类型相关联。假设这些项目可以有不同的视图 - 您似乎只是将 "gilded" 按钮或标签作为一个选项。

将您的数据加载到视图模型中,每行一个。

。添加到 Observablecollection,它是视图模型中的 public 属性。

将其绑定到列表框的项目源。

然后将它们模板化为 UI。

列表框有一个内置的滚动条,但如果您想使用其他方法滚动,您可以重新制作模板。

StackPanel 是一个 Panel,它将子元素排列成一行,可以水平或垂直定向。

ListView 是一个 ItemsControl,您可以将其绑定到 IEnumerable 个对象,并用于呈现项目集合。

您应该做的是创建一个 ItemsControl 和一个 ItemTemplate 对应于列表中的可滚动项目。有一个可用的基本示例 here,您可以在线找到更多示例。