在silverlight应用程序之间传递值

时间:2012-06-18 17:57:12

标签: silverlight silverlight-4.0

我创建了一个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();
    }

任何?

1 个答案:

答案 0 :(得分:0)

我同意ChrisT,我认为Prism或MEF可以解决你的问题。 无论如何,在网上做一些搜索并寻找这两个类: **

LocalMessageSender
LocalMessageReceiver

**

祝你好运