汇编资源字典中的MVVMLight DataTemplates

本文关键字:MVVMLight DataTemplates 资源 字典 汇编 | 更新日期: 2023-09-27 18:08:16

我使用WPF和c#的MVVMLight工具包。有一个WPF应用程序,带有一个窗口(Shell)和一个程序集,其中控件(UI)。ViewModels在第三个DLL (BIZ)中。

在窗口中显示的唯一东西是一个名为"ShellView"的控件,它是主要的UI部分。我这样做是为了能够在不同的窗口中重用大部分应用程序。

目前我在"Shell"App.config中做view和viewmodel之间的所有绑定。

我´ve引用

:

程序集名称空间

xmlns:views="clr-namespace:Application.UI;assembly=Application.UI"
xmlns:vm="clr-namespace:Application.BIZ;assembly=Application.BIZ"

视图模型定位器

<vm:ViewModelLocator xmlns:vm="clr-namespace:Application.BIZ;assembly=Application.BIZ" x:Key="Locator" d:IsDataSource="True" />

使用了DataTemplates

<DataTemplate  
    DataType="{x:Type vm:ShellVM}">
<views:ShellView />

所以如果我将内容控件的内容绑定到ViewModelBase类,视图会自动显示-一切都很好。

现在我试图将数据模板的定义移动到UI程序集中,并在窗口应用程序中引用它。所以所有的模板和绑定都是在UI程序集中完成的,窗口只是引用所有的程序集并显示"ShellView"。

我的问题是:这是可能的,我如何在App.xaml引用程序集?目前我得到了大量的xaml解析异常。

提前感谢

汇编资源字典中的MVVMLight DataTemplates

像这样的东西应该工作,在您的新项目中添加一个资源字典并将您的模板添加到其中

 <ResourceDictionary>
 <DataTemplate  x:Key="Foo" >
 </ResourceDictionary>

在app。xaml

 <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            path to your Foo datatemplate for example
            <ResourceDictionary Source="MyAssembly;component/MyFolder/MyResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
</Application>

然后在代码中引用它作为StaticResource

例子
 <ListBox ItemTemplate="{StaticResource Foo}"/>