未显示的模块外部视图

时间:2013-02-18 16:44:59

标签: wpf caliburn.micro

我正在开发一个WPF应用程序,它将dll中的模块作为延迟屏幕加载到TransitionContentControl中。遵循标准命名约定时,正确显示模块中Viewmodel的视图。但是,我有两个问题:

1)模块本身使用外部“小部件”,屏幕包含从另一个dll加载的视图。

[ImportMany(typeof(IWidget), AllowRecomposition = true)]
        public IEnumerable<ExportFactory<IWidget, IWidgetMetadata>> _widgets { get; set; }

<ContentControl x:Name="Navigator" cal:View.Model="{Binding Navigator}"/>

调用属性“Navigator”,在第一个实例中没有找到视图。但随后它被第二次调用并且检测到视图,因为我可以看到窗口小部件视图模型有一个视图附加(OnViewAttached调用)给它们(ViewAware类),View本身也有ViewModel作为其DataContext。但是,它们最后没有显示出来;我也认识到永远不会调用“OnViewLoaded”,而是视图“找不到视图......”。问题在哪里?

我使用了类似的原型应用程序并添加了产生问题的Widgets项目,但Navigator属性在此处只调用一次。输出是相同的,但没有找到视图。

LINK

2)另一个问题是“cal:View.Context”似乎在模块中不起作用,因此View文件夹中的子文件夹似乎无法解析。

/帕特里克

1 个答案:

答案 0 :(得分:1)

CM正在使用其AssemblySource注册表来查找匹配的候选视图。默认情况下,它包含所有类型的启动程序集。

在你的情况下,程序集是松散耦合和动态加载的,CM很可能找不到它们。

加载程序集后立即尝试AssemblySource.Instance.Add(yourAssembly);,这样可以解决您的问题。

BTW:为什么在示例中使用基于约定的显式CM ViewModel绑定?