Как я могу передать объект между страницами в Silverlight? - PullRequest
2 голосов
/ 06 декабря 2010

например:


NavigationService.Navigate(new Uri("/PlayerLost.xaml", UriKind.Relative));

Я не хочу использовать строку запроса. Я слышал о viewmodel ... Спасибо.

Ответы [ 4 ]

2 голосов
/ 10 января 2011

Поздний ответ, но я тоже пытался найти ответ.Надеюсь, это работает для вас, но это в VB.Надеюсь, это достаточно легко расшифровать.У меня есть класс под названием ITRSClass.На моем MainPage.xaml.vb у меня есть:

Public Shared myClass As New ITRSClass

Это также может быть любой объект или переменная, например:

Public Shared myString as New String = "My New String"

затем с новой страницы, которую я открываюв моем случае это файл Setup.xaml.vb), я могу получить ссылку на этот объект или переменную, например:

Dim mySharedClass = MainPage.myClass

или:

Dim mySharedString = MainPage.myString

В моем случаеObservableCollection класса, который я использую для обновления ListBox на моей главной странице, основываясь на результатах моей страницы (Setup.xaml.vb).

Вот где я это узнал - гораздо лучшее объяснение: Блог Дэйва Коруна

1 голос
/ 10 января 2011

Нет хорошего способа передать объект и помнить о проблемах, которые могут привести к передаче объекта - если этот фрейм интегрирован в браузер (по умолчанию, поэтому кнопки назад / вперед в браузере работают с вашим фреймом) тогда это означает, что URL, который будет отображаться в браузере пользователя, будет заканчиваться на "/PlayerLost.xaml"

Тогда, если этот URL скопирован / вставлен (или добавлено избранное и т. Д.), И пользователь возвращается на страницу, объекта, который вы хотите переместить, не будет (потому что это свежий экземпляр приложения).

Так что вам лучше использовать строки запроса для такого рода состояния, потому что тогда состояние находится в URL-адресе, и приложение может получить его, независимо от того, попадает ли оно туда во время обычного выполнения или по внутренней ссылке.

Если данные, которые вам нужно передать, слишком сложны для представления строки запроса, сохраните объект где-нибудь «глобально» (обычным способом добавьте свойство в класс Application или создайте статическое свойство где-нибудь) и получите доступ это с итоговой страницы. Страница должна быть устойчивой к тому, что эти данные отсутствуют (для сценария Deeplink).

1 голос
/ 06 декабря 2010

Вместо использования «Навигации» вы можете сначала создать свою страницу вручную и установить свойство Content в ContentFrame. Используя этот метод, вы можете открыть открытое свойство для вашего объекта и установить его перед загрузкой в ​​ContentFrame:

Views.MyView vw = new Views.MyView();
vw.MyParameter = ... ;
this.ContentFrame1.Content = vw;

Или вы можете использовать глобальные переменные, но используйте их с умом:)

0 голосов
/ 07 апреля 2015

То, что я делаю, очень просто: (пример vb) В файле app.xaml.vb откройте файл, и вы увидите:

Частичное общедоступное приложение класса наследует приложение

простодобавить частичное общедоступное приложение класса наследует приложение публичное общее имя wname в виде строки

Затем на странице, на которой вы хотите использовать переменную, просто вызовите app.wname

Done!

Удачного кодирования!

Артур

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...