Я создал ViewModelLocator с использованием Unity и успешно использую его с одноэлементными экземплярами 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}"
Мой вопрос: как мне поддерживать один и тот же шаблон (и смешиваемость) с несколькими экземплярами одной и той же модели представления?
Я нашел ссылку на то, что я хочу сделать в этомpost Как иметь несколько пар "View-ViewModel"? , но это не входит в специфику реализации.
Я хочу иметь возможность иметь несколько экземпляров этих ViewsПары / ViewModel для разных деревьев данных, позволяющие копировать и вставлять между ними и т. Д., Но не могут придумать, как обрабатывать определенные экземпляры в ViewModelLocator с использованием контейнера?
Я предполагаю, что мне нужна какая-то коллекция ViewModel согласноупомянутое выше сообщение, но как мне зарегистрировать эту коллекцию в контейнере Unity и как привязать ее к представлению в представлении?
Любая помощьочень ценится.