0

最近、それらを個別の xap ファイルに分割した Silverlight アプリケーションがあります。

意図はこうです。ユーザーからいくつかの入力を受け取り、それをデータベースに永続化する 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();

        }
    }

(この UI はすべて、個別の xap に分割する前は機能していました。分割するのには十分な理由がありました)

どんな助けでも大歓迎です

アップデート

サンプルリンクをたどってみましたが、データベースからのすべての情報を使用して、別の xap ファイルから 2 番目の UI を起動できました。

今、私は新しい問題にぶつかったようです。2 番目の UI でキャンセルを行う場合、removeXap を呼び出す 2 番目の xap をカタログからアンロードする必要がありますか? そうすると、コンポジションが変更されていないというエラーが表示されます。

1) 部分 'xapfile2.Views.MyView' の再構成不可能なインポート 'xapfile2.Views.ViewModel (ContractName="MyViewModel")' によって防止されたエクスポートの変更。何か案は?。

ありがとうK

4

3 に答える 3

1

XAP ファイルを取り込むには、フレームワークを使用する必要があります。あなたは車輪を再発明しています。

私の提案は、Microsoft によって作成されたフレームワークである MEF を使用して、作成していることを正確に実行することです。

MEF には、xap ファイルをダウンロードしてロードする配置カタログの概念があります。次に、インターフェイスやコントラクトなどのパターンを使用して、オブジェクトを作成し、画面に表示して、より多くの入力を受け取ることができます。

この例を参照してください: http://codebetter.com/glennblock/2010/03/08/building-hello-mef-part-iv-deploymentcatalog/

幸運を!

于 2012-01-06T19:52:31.423 に答える
0

多くの苦労の末、xap ファイルに冗長なアセンブリがあることがわかりました。どうやら、アセンブリに競合があってはなりません。2 番目の xap に必要なアセンブリで CopyLocal = False を設定すると、問題が解決したようです。

ヒントをくれてありがとう

K

于 2012-01-11T15:03:55.580 に答える