我如何使用MEF将我的项目分割成更小的xap并动态下载它们?
本文关键字:xap 动态 下载 MEF 何使用 我的 分割 项目 | 更新日期: 2023-09-27 18:02:08
现在,我的XAP文件已经变大了,我需要一个解决方案将它分割成一些更小的应用程序。MEF或PRISM可能解决我的问题
我阅读并观看了它们的在线教程,但仍然不知道如何将它们应用到我当前的项目中。
让我解释一下我的项目:
-在主页中。xaml只有一个菜单控件。但是,该菜单控件将基于通过服务调用检索到的数据动态构建。你可以看到我的菜单图片
http://www.flickr.com/photos/31396433@N08集/72157627077751863/
-每次用户单击菜单项时,该菜单项的窗口将弹出,让用户进行业务工作。你可以在我的GeneralLedger_JournalPosting图片上看到。journalPosting菜单项属于GeneralLedger部分。
http://www.flickr.com/photos/31396433@N08集/72157627077751863/
这是显示如何通过菜单控件
上的菜单项的单击事件显示弹出菜单项窗口的代码private void MenuItemClick(object sender, RadRoutedEventArgs args)
{
RadMenuItem item = args.OriginalSource as RadMenuItem;
SFMenu sFMenu = item.Header as SFMenu;
OpenMenuItemScreenBy(sFMenu.Name);
}
private void OpenMenuItemScreenBy(string menuName)
{
if (menuName == "User Management")
{
var userManagement = new UserManagement();
//userManagement.WindowStartupLocation = WindowStartupLocation.Manual;
userManagement.Top = 50;
userManagement.Show();
}
//Testing area
else if (menuName == "Testing")
{
Testing t = new Testing();
t.Top = 50;
t.Show();
}
//
......
.......
这就是我的项目。基本上,我只需要为我的每个菜单项创建不同的屏幕。因为我的菜单项的数量不断增加,所以应该创建更多相应的窗口屏幕。这使得XAP变大了。
解决方案:
我正在考虑一种方法来分离我的每个窗口菜单项屏幕(如GeneralLedger_JournalPosting)到单独的XAP。我的主XAP文件将只包含menuControl。
然而,我需要知道如何加载我相应的menuItem XAP文件的方法,如果用户点击一个menuItem(例如GeneralLedger/JournalPosting)。然后打开JournalPosting界面
但是如果用户再次点击该菜单项,则不需要下载。看看cache
(我看了MEF教程,知道我需要为这个特性使用DeloymentCatalog。但是,我没有看到任何示例让我们通过代码手动访问动态XAP文件中的用户控件)
其次,
因为我的每个菜单项窗口屏幕将使用相同的第三方dll(例如:GridView, Navigation,…的dll)。所以你也可以告诉我如何让我只下载那些dll一次。因为如果我把这些dll放入我的每个菜单项窗口屏幕XAP,那么我认为每次请求下载相应的XAP时,它们都会被重新下载
谢谢你的帮助。请看:http://www.codeproject.com/KB/silverlight/MEFDynamicLoading.aspx。这个项目描述了如何按需加载xap并在下载后显示它们。
您感兴趣的部分是MainPageModel.cs。加载xap并将内容放入面板。因此,如果您要求DeploymentCatalogService"AddXap",并且它已经加载=>调用回调或触发事件。
关于dll的。你必须把它们放在MainApp中。在你下载的应用程序中,你必须在MainApp定义的dll中设置CopyLocal = false(这是在dll的属性中找到的)
我希望这对你有帮助!
BR,
TJ