Единственное место, где вы можете получить параметр URL - это вид. Поэтому, поскольку ваше представление, вероятно, зависит от него, вы должны получить его в методе OnNavigatedTo.
Затем вы должны передать его своей модели представления, используя либо обмен сообщениями (слишком дорого, если вы спросите меня), либо обращаясь к своему текстовому тексту (который, как я полагаю, является моделью представления) и выполняя метод для этого.
private AddTilePageViewModel ViewModel
{
get
{
return DataContext as AddTilePageViewModel;
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var postalCode = NavigationContext.TryGetKey("PostalCode");
var country = NavigationContext.TryGetStringKey("Country");
if (postalCode.HasValue && string.IsNullOrEmpty(country) == false)
{
ViewModel.LoadCity(postalCode.Value, country);
}
base.OnNavigatedTo(e);
}
Я использую некоторые специальные расширения для NavigationContext, чтобы упростить его.
namespace System.Windows.Navigation
{
public static class NavigationExtensions
{
public static int? TryGetKey(this NavigationContext source, string key)
{
if (source.QueryString.ContainsKey(key))
{
string value = source.QueryString[key];
int result = 0;
if (int.TryParse(value, out result))
{
return result;
}
}
return null;
}
public static string TryGetStringKey(this NavigationContext source, string key)
{
if (source.QueryString.ContainsKey(key))
{
return source.QueryString[key];
}
return null;
}
}
}