Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight共享上下文中的不同XAP文件_Silverlight_Xap - Fatal编程技术网

Silverlight共享上下文中的不同XAP文件

Silverlight共享上下文中的不同XAP文件,silverlight,xap,Silverlight,Xap,我有一个silverlight应用程序,最近我将其拆分为单独的xap文件 目的就是这样。有一个xap文件1,它接受用户的一些输入,并将其保存到数据库中。当用户单击此UI上的按钮(来自xap文件1)时,它将加载xap文件2,该文件要求更多输入并将其保存到数据库中 我可以从xap文件1中调用xap文件2,但UI似乎无法从数据库中获取信息(UI显示了上一个UI保留的内容),也无法保留用户的输入。我意识到xap文件2需要以某种方式告知在何处以及如何持久化 这就是我加载xap文件2的方式

我有一个silverlight应用程序,最近我将其拆分为单独的xap文件

目的就是这样。有一个xap文件1,它接受用户的一些输入,并将其保存到数据库中。当用户单击此UI上的按钮(来自xap文件1)时,它将加载xap文件2,该文件要求更多输入并将其保存到数据库中

我可以从xap文件1中调用xap文件2,但UI似乎无法从数据库中获取信息(UI显示了上一个UI保留的内容),也无法保留用户的输入。我意识到xap文件2需要以某种方式告知在何处以及如何持久化

这就是我加载xap文件2的方式

        WebClient wc = new WebClient();
        wc.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompleted);
        Uri uri = new Uri("xapfile2.xap", UriKind.Relative);
        wc.OpenReadAsync(uri);


 private void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        Uri uri = new Uri("xapfile2.dll", UriKind.Relative);

        StreamResourceInfo resource_stream = App.GetResourceStream(new StreamResourceInfo(e.Result, null), uri);

        AssemblyPart part = new AssemblyPart();
        Assembly assembly = part.Load(resource_stream.Stream);
        UIElement control = assembly.CreateInstance("xapfile2.Window") as UIElement;
        if (control != null)
        {
            RadWindow window = (RadWindow)control;
            window.ShowDialog();

        }
    }
(在我将它们拆分为单独的xap之前,所有这些UI都正常工作。我们有充分的理由拆分它们)

任何帮助都将不胜感激

更新


我试着遵循这个示例,并且能够从单独的xap文件启动第二个UI,其中包含数据库中的所有信息

现在我似乎遇到了一个新问题。在第二个UI上执行取消操作时,是否必须从目录中卸载调用removeXap的第二个xap?当我这样做时,我得到的构图保持不变的错误

1) “xapfile2.Views.MyView”部分上不可重新编译的导入“xapfile2.Views.ViewModel(ContractName=“MyViewModel”)”阻止了导出的更改。有什么想法吗

谢谢
K

您应该使用框架来引入XAP文件。你在重新发明轮子

我的建议是使用MEF,这是一个由Microsoft创建的框架,可以完全完成您正在创建的内容

MEF有一个部署目录的概念,它下载xap文件并加载它们。然后,使用接口和契约等模式,您可以创建对象,在屏幕上显示它们,并接受更多输入

请参见此示例:


祝你好运

使用单独的XAP文件不会创建任何边界——加载第二个XAP时,其类型将加载到同一个AppDomain中。似乎您需要Xap1和Xap2中的类之间的某种公共消息传递总线。您可以使用事件聚合器。许多框架都有一个,或者您可以使用自己的——在两个xap引用的dll中构建它(和自定义事件类型)。
我想我已经使用了

,经过很多努力,我发现我在xap文件中有多余的程序集。显然,程序集中不应该有冲突。在第二个xap所需的程序集上设置CopyLocal=False似乎解决了这个问题

谢谢你们的提示


K

您是否考虑过使用prism为您加载xap文件模块?这可能会有帮助。新问题应该是新问题。其他人可能有相同的问题,或者将有相同的问题,并希望搜索它。我尝试了以下示例,并能够从单独的xap文件启动第二个UI,其中包含数据库中的所有信息。现在我似乎遇到了一个新问题。当我在第二个UI上执行取消操作时,是否必须从目录中卸载调用removeXap的第二个xap?嗨,耶利米,谢谢你的回答。