mvvm light Winforms dll项目,如何加载ViewModelLocator

时间:2015-05-20 21:36:19

标签: mvvm-light mvvm-toolkit

我正在研究c#中的winforms项目。该项目是一个outlook插件,所以没有希望完全转换为mvvmlight / wpf,因为它是一个winforms dll项目。

然而,我试图想出一种方法来使用MvvM Light和WPF与ElementHost。我遇到的问题是访问ViewModelLocator。通常,这会在App.xaml中添加,如下所示:

<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />

并可通过以下方式查看视图:

DataContext="{Binding MyViewModel, Source={StaticResource Locator}}"

就我而言,我没有App.xaml,也没有程序main()方法,我可以在其中引导框架(因为这是一个dll项目,而不是应用程序)。我在我的WPF用户控件(托管在elementhost中)中尝试了以下操作,但它不起作用:

DataContext="{Binding MyViewModel, Source={StaticResource Locator}}"
...
<UserControl.Resources>        
    <ResourceDictionary>
        <wpf:ViewModelLocator x:Key="Locator"
                         d:IsDataSource="True" />

我认为它不起作用,因为它在被调用后被声明了。这本来是一个妥协,因为我在每个视图中都需要这些代码,所以我很高兴它不起作用。

有关如何进入ViewModelLocator的任何建议吗?

谢谢, 杰夫

1 个答案:

答案 0 :(得分:0)

所以我想出了解决这个问题的方法。它并不完美,但它确实有效。最后,我没有应用程序加载引导程序,所以我真正需要的是一种方法让视图到达ViewModelLocator所以我可以数据绑定视图。为此,我在ViewModelLocator类上使MyViewModel属性为静态,然后在xaml(视图)中更改了我的DataContext行,如下所示:

DataContext="{x:Static wpf:ViewModelLocator.MyViewModel}"