如何使用MVVM、PRISM和MEF处理来自视图模型的UI交互,而无需用户请求

如何使用MVVM、PRISM和MEF处理来自视图模型的UI交互,而无需用户请求,mvvm,prism,mef,Mvvm,Prism,Mef,我正在开发一个使用WPF、MVVM、Prism和MEF的应用程序 我将导航与请求导航、控制器与视图管理(使用区域管理器)相结合,并通过事件聚合器进行事件处理,以便在单个窗口中运行应用程序。我使用的是一种视图优先的方法,类似于股票交易员RI的工作方式。 当用户启动任何与UI(忙碌指示器)交互的视图模型代码时,这非常有效,但当在后台启动时,可能会出现问题 我知道这似乎是一个糟糕的实现,但我认为我有一个有效的方案。我的特定示例与登录有关 当前,应用程序启动并加载shell。登录视图被加载到shell的

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

我将导航与请求导航、控制器与视图管理(使用区域管理器)相结合,并通过事件聚合器进行事件处理,以便在单个窗口中运行应用程序。我使用的是一种视图优先的方法,类似于股票交易员RI的工作方式。 当用户启动任何与UI(忙碌指示器)交互的视图模型代码时,这非常有效,但当在后台启动时,可能会出现问题

我知道这似乎是一个糟糕的实现,但我认为我有一个有效的方案。我的特定示例与登录有关

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

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

所以现在我有一个新的要求,用户可以在登录表单上选择自动登录,这样下次用户启动应用程序时,登录视图将不会显示,而登录将发生在后台

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

问题是在哪里启动自动登录调用?shell视图模型构造函数?shell视图模型partImportMessage实现?在这些地方中的任何一个,shell视图(包含我的忙指示器)都还没有真正加载。因此,我所需要的资源(如区域和区域经理)都不可用。 那么,对于我来说,实现这一点的好方法是什么:

检查以前的用户是否应该自动登录(已解决此部分)


非常感谢您的任何想法。

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

public class ShellViewModel : ILoadable
{
    public ShellViewModel()
    {

    }

    bool ILoadable.Load()
    {
         //this is where you can take care of your auto login
    }
}
然后,您可以在
引导程序
类中调用它。如果这是在另一个模块中完成的,您可以在
IModule.Initialize
方法中调用它


我还认为,这种逻辑应该在一个服务中实现,该服务可以由上面提到的
ShellViewModel
调用,或者理论上可以直接从
引导程序
类调用;允许ShellViewModel潜在地利用来自服务内部的有状态数据。

足够公平。这是一个很好的观点。实际上,我不会使用这些位置,而是在构图过程中使用它们来说明Prism/MEF的入口点。所以我的问题是。什么调用ShellViewModel中的ILoadable.Load?
public class ShellViewModel : ILoadable
{
    public ShellViewModel()
    {

    }

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