Передача параметров на страницу WPF через ее Uri
в контексте приложения WPF в стиле навигации (NavigationWindow, а не XBAP):
возможно ли, чтобы NavigateUri гиперссылки содержал дополнительные параметры, такие как данные пути или строка запроса? Например, есть ли способ установить мой NavigateUri в /Product.xaml/123
или /Product.xaml?id=123
и есть мой продукт.страница xaml может видеть, что она была вызвана с параметром 123
?
3 ответов
вы можете сделать это. См.http://www.paulstovell.com/wpf-navigation:
хотя это не очевидно, вы можете передать данные строки запроса на страницу и извлеките его с пути. Например, ваша гиперссылка может передать значение в URI-код:
<TextBlock> <Hyperlink NavigateUri="Page2.xaml?Message=Hello">Go to page 2</Hyperlink> </TextBlock>
когда страница загружена, она может извлечение параметров через
NavigationService.CurrentSource
, которым возвращает объект Uri. Это может тогда изучить Ури растащить ценности. Тем не менее, я сильно рекомендовать против такого подхода, за исключением самые ужасные обстоятельства.гораздо лучший подход предполагает использование перегрузка Метод NavigationService.Навигация, которая занимает объект для параметра. Вы можете инициализируйте объект самостоятельно, для пример:
Customer selectedCustomer = (Customer)listBox.SelectedItem; this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
предполагается, что конструктор страницы получает объект Customer как параметр. Это позволяет вам пройти гораздо богаче информация между страницами, и без разбора веревка.
другой способ-создать общедоступную переменную на странице destiny и использовать свойство get/set для присвоения ей значения.
На Странице:
private Int32 pMyVar;
public Int32 MyVar
{
get { return this.pMyVar; }
set { this.pMyVar = value; }
}
при навигации к нему:
MyPagePath.PageName NewPage = new MyPagePath.PageName();
NewPage.MyVar = 10;
this.MainFrameName.NavigationService.Navigate(NewPage);
при загрузке NewPage целое число MyVar будет равно 10. MainFrameName-это фрейм, который вы используете, если вы работаете с фреймом, но если нет, команда navigate остается неизменной независимо. Это мое мнение, но, кажется, легче отслеживать его таким образом и многое другое удобный для тех, кто пришел с C# до WPF.
Customer selectedCustomer = (Customer)listBox.SelectedItem;
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
Павел Stovellбыл я думаю, что используя ваше предложение сделает ваши страницы НЕ мусора потому что весь экземпляр останется в журнале.