小编use*_*155的帖子

WPF + Castle Windsor + MVVM:Locator-DataContext

编辑:
我找到了一种方法来做到这一点,但我不确定它是否是最好的方法.
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运行时不同,这就是它无法找到资源的原因.

我的两个问题是:

  • 使用Castle Windsor时是否需要ViewModelLocator?在
  • 是的情况:如何正确设置视图的DataContext
  • 温莎?如果是否:怎么会是正确的方式?

我留下了我的城堡配置.任何帮助将非常感激.

我的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)

wpf castle-windsor castle mvvm

1
推荐指数
1
解决办法
4296
查看次数

标签 统计

castle ×1

castle-windsor ×1

mvvm ×1

wpf ×1