WPF MVVM - 遍布ViewModels的共享数据对象

时间:2012-12-10 11:54:34

标签: wpf mvvm properties

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

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

现在,如何让所有其他与之交互的ViewModel及其数据都能访问此当前连接的帐户?

例如,操纵其登录详细信息的ViewModels,例如ViewModels,它将其内容添加到其RecentActivities属性等等。

我应该持有对当前帐户的引用吗?在每个使用此对象的ViewModel中都有类似CurrentAccount的东西吗?

感谢。

2 个答案:

答案 0 :(得分:1)

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

所以,如果你正在使用DI和IOC。 如果您使用Unity之类的东西 - 使用ControlledContainerLifetime()选项使其成为单身。

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

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

答案 1 :(得分: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。