编辑:
我找到了一种方法来做到这一点,但我不确定它是否是最好的方法.
在WindsorContainer初始化中,首先注册viewmodel:
container.Register(Component.For<CentrosViewModel>().LifeStyle.Transient);
Run Code Online (Sandbox Code Playgroud)
后来我注册了View
container.Register(Component.For<CentrosAdminView>().LifeStyle.Transient.DependsOn(Property.ForKey("DataContext")
.Eq(ViewModelLocator.Centrosviewmodel)));
Run Code Online (Sandbox Code Playgroud)
财产的定义ViewModelLocator.Centrosviewmodel是:
public static CentrosModel Centrosviewmodel
{
get
{
return App.container.Resolve<CentrosViewModel>();
}
}
Run Code Online (Sandbox Code Playgroud)
结束编辑
我正在尝试使用Castle Windsor和Mvvm Toolkit(galasoft)创建一个Wpf应用程序,但我认为我的问题与任何MVVM工具包都是一样的.
使用MVVM,您必须将View的DataContext设置为ViewModel.通常,这是在视图声明中通过类似的方式完成的
DataContext={Binding MyViewModelInstanceName,Source={StaticResource Locator}}
Run Code Online (Sandbox Code Playgroud)
资源定位器在App.xaml中定义如下:
<Application.Resources>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
如果我在App.xaml中建立StartupURI到我的视图,那一切都是正确的.但是,如果我将StartupUri留空并尝试使用以下语法通过城堡获取我的视图实例:
container.Resolve<CentrosAdminView>().Show();
Run Code Online (Sandbox Code Playgroud)
我得到例外: "Cannot Find Resource with Name '{Locator}'
我认为,直接运行时的Initial DataContext与通过Castle Windsor运行时不同,这就是它无法找到资源的原因.
我的两个问题是:
我留下了我的城堡配置.任何帮助将非常感激.
我的Windsor配置如下所示:
<castle>
<properties>
<!-- SQL Server settings -->
<connectionString>Server=192.168.69.69;Database=GIOFACTMVVM;user id=sa;password=22336655</connectionString>
<nhibernateDriver>NHibernate.Driver.SqlClientDriver</nhibernateDriver>
<nhibernateDialect>NHibernate.Dialect.MsSql2005Dialect</nhibernateDialect>
</properties>
<facilities>
<facility id="nhibernatefacility"
type="Repository.Infrastructure.ContextualNHibernateFacility, Repository">
<factory id="sessionFactory1">
<settings> …Run Code Online (Sandbox Code Playgroud)