首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多实例ViewModels和ViewModelLocator

多实例ViewModels和ViewModelLocator
EN

Stack Overflow用户
提问于 2011-05-04 18:23:56
回答 1查看 2.3K关注 0票数 4

我已经使用Unity构建了一个ViewModelLocator,并且已经成功地将它与单例ViewModel实例一起使用。例如:

代码语言:javascript
复制
public class ViewModelLocator
{
    private static readonly UnityContainer Container;

    static ViewModelLocator()
    {
        Container = new UnityContainer();

        if (ViewModelBase.IsInDesignModeStatic)
        {
            //Design Time Data Services
            Container.RegisterType<IMyServiceServiceAgent, DesignMyServiceServiceAgent>();
        }
        else
        {
            //Real Data Services
            Container.RegisterType<IMyServiceServiceAgent, MyServiceServiceAgent>();
        }

        Container.RegisterType<TreeViewViewModel>(new ContainerControlledLifetimeManager());
    }

    public TreeViewModel ViewModel
    {
        get
        {
            return Container.Resolve<TreeViewModel>();
        }
    }
}

在App.xaml中将ViewModelLocator定义为资源:

代码语言:javascript
复制
<Application.Resources>
    <ResourceDictionary>
        <VMS:ViewModelLocator x:Key="ViewModelLocator" d:IsDataSource="True"/>
    </ResourceDictionary>
</Application.Resources>

它允许我在任何视图中绑定ViewModel,如下所示:

代码语言:javascript
复制
DataContext="{Binding TreeViewModel, Source={StaticResource ViewModelLocator}}" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=False}"

我的问题是,如何在同一个ViewModel的多个实例中保持相同的模式(以及可混合性)?

我在这篇文章How to have multiple pairs "View-ViewModel"?中找到了我想要做的事情的参考,但它没有深入到实现的细节。

我想要做的是为不同的数据树拥有这些视图/视图模型对的多个实例,允许它们之间的复制和粘贴等,但是不能考虑如何使用容器来迎合ViewModelLocator中的特定实例?

我假设我需要一些ViewModels的集合,但是我如何在Unity Container中注册该集合,以及如何在视图中绑定到该集合?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2011-05-11 22:43:40

在您的情况下,我所做的是仍然为视图使用一个ViewModel,但是使用另一个ViewModel来保存可以更改的数据。

例如,如果我有一个显示用户信息的UserView控件,那么我就有一个通过ViewModelLocator绑定到该视图的UserViewModel。我还有一个UserModel类,它可以根据当前正在查看/编辑的用户进行更改。此UserModel类继承自ViewModelBase,并由UserViewModel类通过属性公开。例如,在应用程序的其他地方,如果选择了一个用户,我将UserViewModel的user属性设置为我希望在UserView中显示的UserModel。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5881929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档