0

我正在开发一个 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 类),视图本身也有 ViewModel 作为它的 DataContext。但是,它们没有在最后显示;我也认识到从未调用过“OnViewLoaded”,而是视图“找不到视图......”。问题出在哪里?

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

关联

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

/帕特里克

4

1 回答 1

1

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

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

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

顺便说一句:为什么在您的示例中使用基于约定显式的 CM ViewModel 绑定?

于 2013-03-12T21:27:05.027 回答