假设我有一个外壳程序和几个使用Microsoft CompoisteWPF(棱镜v2)的单独的模块项目...复合WPF(棱镜)模块资源数据模板
在接收命令,模块创建一个新的ViewModel并通过区域管理器将其添加到区域。
var viewModel = _container.Resolve<IMyViewModel>();
_regionManager.Regions[RegionNames.ShellMainRegion].Add(viewModel);
我以为我可以然后创建模块内的资源字典和建立数据模板以显示该加载视图模型类型的图(见下文XAML)。但是,当视图模型被添加到视图中时,我得到的只是视图模型名称空间的打印输出。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:Modules.Module1.ViewModels"
xmlns:vw="clr-namespace:Modules.Module1.Views"
>
<DataTemplate DataType="{x:Type vm:MyViewModel}">
<vw:MyView />
</DataTemplate>
</ResourceDictionary>
编辑:
我可以得到它通过向App.xaml中
<Application.Resources>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Module1;component/Module1Resources.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Module2;component/Module2Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</Application.Resources>
这很好的工作,但它意味着创建新的模块,应用程序。需要将xaml文件添加到。我正在寻找的是模块的一种方式,因为它们会加载到动态添加到Application.Resources中。这可能吗?
谢谢。 WPF知道如何使用DataTemplate呈现ViewModel(请参阅:http://msdn.microsoft.com/zh-cn/magazine/dd419663.aspx#id0090097)。问题是让应用程序了解另一个程序集中的DataTemplate。我编辑了这篇文章以提供更多细节。 – Oll 2009-07-23 19:27:00
哦,我明白你在做什么。您可能必须为模块提供一些接口(IMergeDictionaryRegistration,接受包url的方法),并将它们附加到应用程序的资源字典中。只是一个理论。 – 2009-07-23 22:32:19