我创建了一个Silverlight业务应用程序,它作为我的主要silverlight页面运行。对于我的“菜单”上的每个超链接按钮,我启动另一个Silverlight应用程序,该应用程序在Visual Studio中作为不同的项目创建。这些是非商业应用程序。
一切都运作良好。但是我试图将一个值从我的主SL应用程序传递到里面的SL应用程序。 我一直在谷歌搜索,无法找到答案。 据我所知,InitParam用于ASP和SL之间,而不是SL应用之间。 由于App配置是为第一个SL应用程序启动的,而第二个应用程序的app配置从未启动过,我无法使用它(这至少是我的理解)
我要传递的值是登录名和角色,可以从Silverlight Business应用程序中的webcontext获取,但是我无法在运行内部的非Business应用程序中获取webcontext。
这是我在主SL应用程序中启动SL应用程序的方式:
public Customers()
{
InitializeComponent();
this.Title = ApplicationStrings.CustomersPageTitle;
if (WebContext.Current.User.IsInRole("Users") || WebContext.Current.User.IsInRole("Administrators"))
{
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri("customers.xap", UriKind.Relative));
}
}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(e.Result, null),
new Uri("AppManifest.xaml", UriKind.Relative)).Stream).ReadToEnd();
XElement deploymentRoot = XDocument.Parse(appManifest).Root;
List<XElement> deploymentParts =
(from assemblyParts in deploymentRoot.Elements().Elements() select assemblyParts).ToList();
Assembly asm = null;
AssemblyPart asmPart = new AssemblyPart();
foreach (XElement xElement in deploymentParts)
{
string source = xElement.Attribute("Source").Value;
StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(e.Result, "application/binary"), new Uri(source, UriKind.Relative));
if (source == "customers.dll")
{
asm = asmPart.Load(streamInfo.Stream);
}
else
{
asmPart.Load(streamInfo.Stream);
}
}
UIElement myData = asm.CreateInstance("customers.MainPage") as UIElement;
stackCustomers.Children.Add(myData);
stackCustomers.UpdateLayout();
}
任何?
答案 0 :(得分:0)
我同意ChrisT,我认为Prism或MEF可以解决你的问题。 无论如何,在网上做一些搜索并寻找这两个类: **
LocalMessageSender
LocalMessageReceiver
**
祝你好运