0

我构建了一个用户必须登录才能继续的应用程序。

已连接的用户,分配到当前 ViewModel 中的 CurrentAccountProperty。

现在,如何让与它及其数据交互的所有其他 ViewModel 可以访问这个当前连接的帐户?

例如,操纵其登录详细信息的 ViewModels,例如,将某些东西添加到其 RecentActivities 属性的 ViewModels 等等。

我应该持有对当前账户的引用吗?每个使用该对象的 ViewModel 中的 CurrentAccount 之类的东西?

谢谢。

4

2 回答 2

1

如果您使用(依赖注入/IOC 容器),我通常这样做的方式是使用依赖注入 - 创建一个 contextviewmodel 使其成为单例,然后将其注入需要使用它的每个 viewmodel 的构造函数中。因此,它在应用程序加载时创建,在您需要填充时填充,然后在整个应用程序中作为上下文持续存在。

因此,如果您使用的是 DI 和 IOC。如果您使用的是 Unity 之类的东西 - 使用 ControlledContainerLifetime() 选项使其成为单例。

您必须将 contextviewmodel 添加到容器中,并且(如果您使用统一等 - 解决它)所以第一次需要它时 - 注入它并更新您需要的登录属性。之后 - 如果您需要在另一个视图模型中使用它 - 只需使用 [Dependency] 属性或构造函数再次注入它。然后因为 contextviewmodel 是一个单例,它将包含与先前设置的属性相同的 contextviewmodel 实例。如果您需要代码示例,请告诉我。

只要您将此视图模型注入到您使用的任何其他类中 - 您就可以使用它,并且它将在您的应用程序的整个生命周期中持续存在。

于 2012-12-10T12:29:51.977 回答
1

好吧,我通常Export在用户登录后设置(MEF)属性。

    /// <summary>
    /// Gets or sets LoggedUser.
    /// </summary>
    [Export]
    public UserInfo LoggedUser { get; set; }

然后我Import到处都需要访问已登录的用户。

    /// <summary>
    /// Gets or sets LoggedUser.
    /// </summary>
    [Import]
    public UserInfo LoggedUser { get; set; }

当然,您也可以使用任何 IoC 容器。当您谈论 MVVM 时,您应该使用某种 IoC。

于 2012-12-10T12:50:39.513 回答