我很失落如何做到这一点。
我理解MEF并且可以使用许多博客文章中的无处不在的DeploymentCatalogService从另一个XAP加载服务和类。我不明白的是如何从另一个XAP实际加载和导航到PAGE。
我想要做的是让我的主应用程序能够调用NavigationService并为其提供应该存在的Page的名称。喜欢:
NavigationService.Navigate(new Uri("/Test", UriKind.Relative));
由其他一个XAP文件决定是否将此页面提供给应用程序。但是,我不知道如何使这项工作。似乎每个人都在构建一些复杂的基础设施来处理这种情况,这非常令人烦恼且过于复杂。
有一种简单的方法吗?
答案 0 :(得分:3)
我见过的一些例子比他们需要的更复杂,但这不是一项简单的任务。在我真正理解发生了什么之前,我花了两天的时间来分解我能找到的例子。
要执行此操作,您需要创建至少两个类。 一个实现INavigationContentLoader的类,这将完成所有工作。 实现IAsyncResult的类。这个对象将传递给INavigationContentLoader,所以用它来跟踪你在做什么。
您的INavgiationContentLoader应执行以下操作。
BeginLoad
CanLoad
您可以尝试在此处放置一些逻辑来测试您是否可以访问指定的XAP,或者您可以返回true并完成它。
CancelLoad
在IAsyncResult中设置一个状态,让您知道操作已被取消。
端负载
此INavgiationContentLoader将加载的所有页面都需要使用ExportAttribute标记,以便ExportFactory可以找到它们。
修改
我的INavigationContentLoader
我的IAsyncResult
ExportAttribute在页面上使用。您需要在所有页面上使用此功能,甚至是本地XAP中的页面。
IExportPageMetaData。这是MEF使用的合同。
使用方法:
声明你的导航:像这样的框架
<navigation:Frame x:Name="ContentFrame"
Source="/Home"`
Grid.Column="1">
<navigation:Frame.ContentLoader>
<navUtil:DynamicContentLoader />
</navigation:Frame.ContentLoader>
</navigation:Frame>
HyperlinkButton到另一个XAP的页面。
<HyperlinkButton Content="Page from another XAP"
NavigateUri="/NavigateUriFromExportPageAttribute"
navUtil:DynamicContentLoader.Xap="UriToOtherXap" />
HyperlinkButton到此XAP的页面。
<HyperlinkButton Content="Page from this XAP"
NavigateUri="/NavigateUriFromExportPageAttribute" />
您不需要UriMapper,也不需要放置Page.xaml的路径。 MEF将从页面读取ExportPageAttribute并以这种方式找到Uri。
答案 1 :(得分:1)
查看Navigating between Pages in Different Xaps (by using MEF)上的http://www.silverlightshow.net帖子。这正是你所需要的。邮政来源也可以。