汇编资源字典中的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解析异常。
提前感谢
像这样的东西应该工作,在您的新项目中添加一个资源字典并将您的模板添加到其中
<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}"/>