【发布时间】:2021-12-27 15:43:03
【问题描述】:
我有一个包含四个主要页面的应用程序,通过标签栏切换(没有“后退”按钮)。 一页有很多内容(ScrollView),并且需要几秒钟才能呈现。我通过在工作完成时显示“加载”覆盖来处理这个问题。但是对于那个特定的页面,我想让视图保持活动状态,这样当用户切换到另一个页面并稍后返回时,页面就准备好了,而无需再次加载所有内容。 不过,我不确定如何在 MvvmCross 中做到这一点。
我确实阅读了文档,据我了解,View Presenter 是正确的做法,因为文档说:
“您的应用可以请求的另一种演示文稿更改 提示包括清除/修改 BackStack、更改根 在保持现有观点的同时,……可能性确实是 无止境。您的应用再次成为王者!”
我想我需要为此创建一个自定义 MvxPresentationHint,但我不太明白 :( 我将如何或更确切地说在哪里访问和存储/加载视图?
我通常对 MvvmCross(它是如何工作的)特别是对 Mvx 类的自定义仍然很陌生,尽管我已经使用了一段时间。 任何解释和最好的代码示例超出文档中所写的内容,我们将不胜感激!
【问题讨论】:
-
任何 MVVM 库的要点在于,您将视图的状态表示为“视图模型”(VM)。那是您定义的一个类,它具有您视图的所有变化细节的属性。因此,您需要保存的是 VM,而不是视图。要恢复,您需要加载该 VM(从您保存它的任何位置)。然后将视图的 BindingContext 设置为该 VM,并按原样重新创建视图。 Google c# mvvm 从视图模型恢复 ui 状态。
-
感谢您的回答@ToolmakerSteve :) 我已经存储了 VM 以保持状态,但是需要很长时间的元素的绘制,而不是 VM 本身的构建。存储 VM 在这方面没有多大帮助,因为仍然在导航时重新创建视图。我需要的是视图永远不会真正关闭,有点像当你使用“后退”按钮(我认为是从堆栈中拉出)时,但在单击选项卡时做同样的事情。