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

时间:2019-03-01 11:44:38

标签: c# wpf rest xaml lazyload

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

我只是困惑于采取哪种方法以及每种方法都提供什么好处/成本

2 个答案:

答案 0 :(得分:1)

轻松的选择:

每个人都使用MVVM,因此请使用MVVM。

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

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

其中一个很大的好处就是您拥有“就在那儿”的标记。因此,当事情变成梨形时,您可以粘贴到实验解决方案中,并在xaml中看到错误,或者查看用户看到的内容。

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

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

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

。添加到一个Observablecollection中,它是视图模型中的公共属性。

将其绑定到列表框的itemssource。

然后将它们模板化到UI中。

列表框内置了一个滚动器,但是如果您想使用其他方法滚动,则可以重新模板化。

答案 1 :(得分:1)

StackPanelPanel,它将子元素排列成单行,可以水平或垂直定向。

ListView是一个ItemsControl,您可以将其绑定到IEnumerable的对象上,并用于显示一组项目。

您应该做的是创建一个ItemsControl的{​​{1}},它与列表中的可滚动项目相对应。 here有一个基本示例,您会在网上找到更多示例。