#wpf
Вопрос:
У меня есть приложение WPF без использования MVVM ,мы пишем код в коде позади,в нем у меня есть древовидное представление с гиперссылками .Я использую следующий код для переключения между страницами
private void MnuMain_RequestNavigate(object sender,
System.Windows.Navigation.RequestNavigateEventArgs e)
{
this.MainContent.Content = null;
this.MainContent.Resources.Clear();
this.MainContent.Navigate(e.Uri, UriKind.RelativeOrAbsolute);
}
MainContent-это фрейм, в котором я показываю страницу с кликами
При нажатии на страницу код проходит через указанные выше строки, а затем переходит в конструктор страницы, где вызывается InitializeComponent ().Однако при повторном нажатии на ссылку конструктор на выбранной странице не вызывается.Я хочу перезагрузить страницу по щелчку той же ссылки ,как это делается в веб-формах.Страница перезагружается ,если я переключаюсь между страницами, но если я нажимаю на ту же ссылку, она не перезагружается.
Ответ №1:
Я нашел решение ,которое мы должны использовать в приведенном ниже коде, который снова вызовет конструктор страницы
this.MainContent.NavigationService.Refresh();
но это не сработает, если мы будем следовать ему с this.MainContent.Navigate(e.Uri, UriKind.RelativeOrAbsolute);
итак, чтобы решить эту проблему
-В конструкторе создайте свойство, которое будет использоваться для хранения последней нажатой ссылки
App.Current.Properties["lastclickedlink"] = "";
затем
private void MnuMain_RequestNavigate(object sender,
System.Windows.Navigation.RequestNavigateEventArgs e)
{
this.MainContent.Content = null;
this.MainContent.Resources.Clear();
if (App.Current.Properties["lastclickedlink"].ToString() == e.Uri.ToString())
{
this.MainContent.NavigationService.Refresh();
}
else
{
this.MainContent.Navigate(e.Uri, UriKind.RelativeOrAbsolute);
}
App.Current.Properties["lastclickedlink"] = e.Uri.ToString();
}