首页 > 解决方案 > WPF - 未知数量元素的分页和事件处理

问题描述

我对 WPF(以及专业环境中的 C#)非常陌生,并且在识别和修复我们的一个应用程序中可能存在的内存泄漏方面遇到了挑战。
该应用程序与 Shopify 集成,以便能够在 WPF 应用程序中使用 web 应用程序(集成支付系统、shopify 订单、产品列表等)。

我正在重构的自定义控件,最初有一些“滚动视图”(用于显示和导航的类别/产品),每次显示 9 个元素。问题在于,每次向下滚动(并加载 +9 个产品)时,它们都会一直加载在内存中,最终导致应用程序崩溃(不完全是崩溃,而是填充内存直到主机用完它,从而减慢应用程序下降到爬行)。

在与我的前辈交谈并集思广益之后,我们得出结论,“简单”和用户体验的最佳选择是对内容进行分页。

所以为了实现这一点,我们有“旧视图”(有填充子用户控件的方法 - 每个“产品”,从 shopify 的 api 获取更新的产品信息,它还有导航事件/逻辑),我有创建了一个新的用户控件,负责“包含”其他用户控件(本质上是产品或容器页面),我在其中跟踪当前产品 ID(每次导航时执行 shopify API 查询 - 本质上是加载 9每次用户前后导航时的产品)和用户正在浏览的当前“页面”。

我正在尝试检索 2*9 产品(如果选择的产品类别/品牌有超过 9 个项目 - “2 页加载方法”运行,如果不是我们默认尝试加载 9+1 产品),在第一个“通过/迭代”,为了“愚弄”用户,而不是让他们等待查询结果的到来(每次查询时,我们都会下载产品信息和图像等)。基本上每次都提前加载 1 页(并跟踪当前页面索引、上一页索引和下一页索引 - 对于这些索引中的每一个,在任何给定时间都有一个与它们匹配的 productID - 每次都向 API 查询它们我们需要检索它们)。示例:page0 - id:123;第 1 页 - id:321;第 2 页 - 编号:456。单击下一步-> page0-id:321;第 1 页 - id:456;第 2 页 - ID:232。编辑:被丢弃的页面/ID/不是

我正在检索我需要跟踪的产品 ID - 我还没有实现当前页面逻辑,但我很确定我必须让这个 UC 与旧 UC 通信 - 发送和检索当前页面索引 - 但由于我对 WPF 很陌生 - 我不明白如何在这个“容器”事物中从其他 UC 连接/触发按钮事件或如何访问它们(我已经尝试过命名空间“方式" 尝试调用旧的用户控件,但我不能在代码隐藏中调用它(因此无法通过点语法访问按钮)。

网上某处可能有一个这样的例子,我可以重构和基于我的代码,但我目前无法在没有知识渊博的人的帮助下找到它。

提前致谢。

标签: c#wpfuser-interfaceevents

解决方案


推荐阅读