我正在尝试将WPF视图注册到其相应的视图模型,并避免在后面使用代码。
到目前为止,我的代码将如下所示:
builder.Register(c =>
{
PageA page = new PageA();
page.DataContext = c.Resolve<PageAViewModel>;
return page;
});
builder.Register(c =>
{
PageB page = new PageB();
page.DataContext = c.Resolve<PageBViewModel>;
return page;
});
是否有更动态的方式来避免必须为所有视图/页面写这些行? (如果可能的话,不使用Service locator模式)。
答案 0 :(得分:3)
您可以创建一个通用方法来注册您的类型:
public static class RegistrationExtension
{
public static IRegistrationBuilder<TPage, ConcreteReflectionActivatorData, SingleRegistrationStyle>
RegisterPage<TPage, TViewModel>(this ContainerBuilder builder)
where TPage : IPage
{
return builder.RegisterType<TPage>()
.OnActivated(e =>
{
e.Instance.DataContext = e.Context.Resolve<TViewModel>();
});
}
}
,然后像这样注册您的页面:
builder.RegisterPage<PageA, PageAViewModel>();