我已经使用 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>
这允许我在任何视图中绑定到 ViewModel,如下所示:
DataContext="{Binding TreeViewModel, Source={StaticResource ViewModelLocator}}" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=False}"
我的问题是如何使用同一 ViewModel 的多个实例保持相同的模式(和可混合性)?
我在这篇文章中找到了我想要做的参考 如何拥有多对“View-ViewModel”?但它没有进入实施的细节。
我想要做的是为不同的数据树提供这些 Views/ViewModel 对的多个实例,允许在它们之间复制和粘贴等,但无法考虑如何使用容器来满足 ViewModelLocator 中的特定实例?
我假设我需要按照上面提到的帖子的某种 ViewModel 集合,但是如何在 Unity Container 中注册该集合以及如何在 View 中绑定到该集合?
任何帮助深表感谢。