Различные файлы XAP в Silverlight - общий доступ - PullRequest
0 голосов
/ 05 января 2012

У меня есть приложение silverlight, которое я недавно разделил на отдельные файлы xap.

Намерение таково. Существует xap-файл 1, который принимает несколько входных данных от пользователя и сохраняет его в базе данных. И когда пользователь нажимает кнопку на этом пользовательском интерфейсе (из xap-файла 1), он загружает xap-файл 2, который запрашивает дополнительные входные данные и сохраняет его в базе данных.

Мне удалось вызвать xap-файл 2 из xap-файла 1, но пользовательский интерфейс, похоже, не может получить информацию из базы данных (пользовательский интерфейс показывает, что сохранилось в предыдущем пользовательском интерфейсе), и не может чтобы сохранить ввод пользователя. Я понимаю, что 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. У нас были веские причины для их разделения)

Любая помощь будет принята с благодарностью

UPDATE

Я попытался по примеру ссылка и смог запустить второй интерфейс из отдельного файла xap со всей информацией из базы данных.

Теперь, похоже, я столкнулся с новой проблемой. Когда я делаю отмену на втором пользовательском интерфейсе, я должен выгрузить второй xap, вызывающий removeXap из каталога? Когда я это делаю, я получаю Композиция остается без изменений.

1) Изменения в экспорте предотвращены нерекомментируемым импортом 'xapfile2.Views.ViewModel (ContractName = "MyViewModel") "на части" xapfile2.Views.MyView ". Есть идеи?

Спасибо K

Ответы [ 3 ]

1 голос
/ 06 января 2012

Вы должны использовать фреймворк для добавления вашего XAP-файла. Ты изобретаешь колесо.

Я предлагаю использовать MEF, среду, созданную Microsoft, для того, чтобы делать именно то, что вы создаете.

MEF имеет концепцию каталога развертывания, который загружает файлы xap и загружает их. Затем, используя шаблоны, такие как интерфейсы и контракты, вы можете создавать объекты, отображать их на экране и получать больше информации.

См. Этот пример: http://codebetter.com/glennblock/2010/03/08/building-hello-mef-part-iv-deploymentcatalog/

Удачи!

0 голосов
/ 11 января 2012

После долгой борьбы я обнаружил, что у меня есть избыточные сборки в файлах xap. Видимо, не должно быть конфликта в собраниях. Установка CopyLocal = False в сборках, необходимых для второго xap, похоже, решила проблему.

Спасибо, ребята, за советы

K

0 голосов
/ 07 января 2012

Наличие отдельных файлов XAP не создает никаких границ - когда загружается 2-й XAP, его типы загружаются в один и тот же домен приложения.Похоже, вам нужна какая-то общая шина обмена сообщениями между классами в Xap1 и Xap2.Вы можете использовать агрегатор событий.Многие фреймворки имеют один или вы можете использовать свой собственный - Соберите его (и пользовательские типы событий) в dll, на которую ссылаются оба xap.Я думаю, что использовал http://www.keith -woods.com / Blog / post / Rx-Event-Aggregator.aspx

...