gpt4 book ai didi

unity-container - 多实例 ViewModel 和 ViewModelLocator

转载 作者:行者123 更新时间:2023-12-01 06:45:32 26 4
gpt4 key购买 nike

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

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>();
}
}
}

ViewModelLocator 在 App.xaml 中定义为资源:
<Application.Resources>
<ResourceDictionary>
<VMS:ViewModelLocator x:Key="ViewModelLocator" d:IsDataSource="True"/>
</ResourceDictionary>
</Application.Resources>

这允许我在任何 View 中绑定(bind)到 ViewModel,如下所示:
DataContext="{Binding TreeViewModel, Source={StaticResource ViewModelLocator}}" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=False}"

我的问题是如何使用同一 ViewModel 的多个实例保持相同的模式(和可混合性)?

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

我想要做的是为不同的数据树提供这些 Views/ViewModel 对的多个实例,允许在它们之间复制和粘贴等,但无法考虑如何使用容器来满足 ViewModelLocator 中的特定实例?

我假设我需要按照上面提到的帖子的某种 ViewModel 集合,但是如何将该集合注册到 Unity Container 以及如何在 View 中绑定(bind)到该集合?

任何帮助深表感谢。

最佳答案

在您的情况下,我所做的仍然是 View 只有一个 ViewModel,但有另一个 ViewModel 保存可以更改的数据。

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

关于unity-container - 多实例 ViewModel 和 ViewModelLocator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881929/

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