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 の複数のインスタンスで同じパターン (およびブレンド可能性) を維持するにはどうすればよいですか?
この投稿で 私がやろうとしていることへの参照を見つけました ただし、実装の詳細には入りません。
私ができるようにしたいのは、これらの Views/ViewModel ペアの複数のインスタンスをさまざまなデータ ツリーに使用して、それらの間でコピー アンド ペーストできるようにすることですが、コンテナーを使用して ViewModelLocator 内の特定のインスタンスに対応する方法を考えることができませんか?
上記の投稿のように、ある種の ViewModels のコレクションが必要であると想定していますが、そのコレクションを Unity コンテナーに登録するにはどうすればよいですか?
どんな助けでも大歓迎です。