现在,我的XAP文件变得很大,我需要一个解决方案来将其分区为一些较小的应用程序。 MEF或PRISM可能会解决我的问题
我阅读并观看了他们的在线教程,但仍然不知道如何将它们应用到我当前的项目中。
让我解释一下我的项目:
- 在mainpage.xaml中,它只有一个menucontrol。但是,该菜单控件将基于通过服务调用检索的数据进行动态构建。你可以在我的菜单图片上看到
http://www.flickr.com/photos/31396433@N08/sets/72157627077751863/
- 每当用户点击menuItem时,将弹出该menuItem的窗口,让用户开展业务。您可以在我的GeneralLedger_JournalPosting图片上看到。 journalPosting menuItem属于GeneralLedger部分。
http://www.flickr.com/photos/31396433@N08/sets/72157627077751863/
这是显示如何通过menuControl上的menuItem的click事件显示弹出menuItem窗口的代码
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();
}
//
......
.......
这就是我的项目。基本上,我只需要为每个menuItem创建不同的屏幕。因为我的menuItems的数量继续增加所以应该创建更多相应的窗口屏幕。这使我的XAP变得更大。
解决方案:
我正在考虑将每个Window MenuItem屏幕(例如GeneralLedger_JournalPosting)分隔成单独的XAP。我的主XAP文件只包含menuControl。
但是,如果用户单击menuItem(例如GeneralLedger / JournalPosting),我需要知道如何动态加载相应的menuItem XAP文件。并打开JournalPosting屏幕
但是如果用户再次点击该menuItem,则无需下载。只需查看缓存
即可(我观看MEF教程并知道我需要使用DeloymentCatalog来获取该功能。但是,我没有看到任何让我们通过代码手动访问动态XAP文件中的usercontrol的示例)
其次,
因为我的每个menuItem窗口屏幕都会使用相同的第三方dll(例如:用于GridView的dll,导航,...)。所以你也可以告诉我如何让我只下载那些dll一次。因为如果我将这些dll放入我的menuItem窗口屏幕XAP中,那么我认为每次相应的XAP请求下载时它们都会被重载
谢谢你的帮助。
答案 0 :(得分:0)
看看这里:http://www.codeproject.com/KB/silverlight/MEFDynamicLoading.aspx。该项目描述了如何按需加载xap并在下载后显示它们。
有趣的部分是MainPageModel.cs。有加载xap并将内容放入面板。所以如果你要求DeploymentCatalogService为“AddXap”并且它已经加载=>调用回调或发起事件。
关于dll的。您必须将它们放在MainApp中。在您下载的应用程序中,您必须将MainApp定义的dll设置为CopyLocal = false(可在dll的属性中找到(参考文献))
我希望这有帮助!
BR,
TJ