gpt4 book ai didi

mvvm - 如何使用 MVVM、PRISM 和 MEF 在没有用户请求的情况下处理来自 View 模型的 UI 交互

转载 作者:行者123 更新时间:2023-12-03 10:30:35 25 4
gpt4 key购买 nike

我正在开发一个使用 WPF、MVVM、Prism 和 MEF 的应用程序。

我正在使用导航与请求导航的组合, Controller 与使用区域管理器的 View 管理,以及通过事件聚合器的事件来在单个窗口中运行应用程序。我正在使用类似于 Stock Trader RI 工作方式的 View 优先方法。
当用户启动任何将与 UI(忙碌指示器)交互的 View 模型代码时,这非常有用,但是当它在幕后启动时可能会出现问题。

我知道这可能看起来像一个糟糕的实现,但我认为我有一个有效的场景。我的特定示例与登录有关。

当前,应用程序启动并加载 shell。登录 View 被加载到 shell 的主要内容区域。当用户单击“登录”时,会显示一个忙碌指示符并执行客户端应用程序服务登录。登录完成后,忙碌指示符消失,屏幕导航到用户的主屏幕。

这很好用,因为导航登录和导航是由用户单击登录按钮启动的。

所以现在我有一个新的要求,用户可以在登录表单上选择自动登录,这样下次用户启动应用程序时,登录 View 就不会出现,登录会在后台进行。

现在如果我只想调用自动登录功能,没有问题,这本身没有 UI 交互并且可以正常工作。但是登录需要几秒钟,我想显示我的忙碌指示器。

问题是我在哪里发起自动登录调用?外壳 View 模型构造函数? shell View 模型 PartImports 的实现是否满意?在任何这些地方,shell View (其中包含我的忙碌指示器)还没有真正加载。结果,我需要的任何资源(例如区域和区域管理器)都不可用。
那么什么可能是我实现这一点的好方法:

检查以前的用户是否应该自动登录(弄清楚这部分)

 If yes then
Show busy indicator
Attempt to auto login
If auto login was success
Hide busy indicator
Navigate to user home screen
Else
Hide busy indicator
Navigate to login screen
Else
Hide busy indicator
Navigate to the login screen

任何想法都非常感谢。

最佳答案

在你的 ShellViewModel 中实现一个接口(interface)这将处理可加载的概念。不要在 ShellViewModel 的构造函数中执行此逻辑因为这通常是不好的做法,最多应该用于实例化对象。

public class ShellViewModel : ILoadable
{
public ShellViewModel()
{

}

bool ILoadable.Load()
{
//this is where you can take care of your auto login
}
}

然后你可以在你的 Bootstrapper 中调用它。类(class)。如果这是在另一个模块中完成的,您可以在 IModule.Initialize 中调用它。方法。

我还认为这个逻辑应该在可以由 ShellViewModel 调用的服务中实现。如上所述,或者理论上可以直接从 Bootstrapper 调用类(class);允许 ShellViewModel 随后使用服务中的有状态数据。

关于mvvm - 如何使用 MVVM、PRISM 和 MEF 在没有用户请求的情况下处理来自 View 模型的 UI 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com