Функция обновления при повторном переходе на страницу в wpf - PullRequest
0 голосов
/ 30 мая 2018

В моем приложении wpf у меня есть две страницы, page1 и page2.

когда пользователь в первый раз переходит от page1 к page2, он автоматически создает новый page2.

в page1, это выглядит примерно так:

public static int someVar;
public Page1()
{
  InitializeComponent();
}
.
.
.
// the user gives some value to "someVar"
void Next_btn(object sender , RoutedEventArgs e)
{
     if (this.NavigationService.CanGoForward)
        this.NavigationService.GoForward();
     else
        NavigationService.Navigate(new Page2());
}

в page2 это выглядит так:

public Page2()
{
   InitializeComponent();
   if(Page1.someVar==3)
      DoSomething();
}
.
.
.
void Back_btn(object sender , RoutedEventArgs e)
{
     if (this.NavigationService.CanGoBack)
        this.NavigationService.GoBack();
}  

Моя проблема заключается в следующем:

скажем, что пользователь сделал следующее:

пользовательбыл в page1 и ставит someVar=2, а затем переходит к page2.поэтому функция DoSomething() не будет вызвана.после этого он вернулся на страницу 1 и изменил someVar=3, а затем снова перешел на страницу 2, но функция DoSomething() вызываться не будет (но мне нужно, чтобы в этом сценарии она называлась так), потому что это не новый page2.

как решить следующий сценарий, не переходя каждый раз на новый page2?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Спасибо @8mm за его руководство, у меня работал следующий код:

Page2 p2=new Page2();
void Next_btn(object sender , RoutedEventArgs e)
    {

        if (this.NavigationService.CanGoForward)
        {
           p2.DoSomething();
            this.NavigationService.GoForward();
        } else
            NavigationService.Navigate(p2);
    }
0 голосов
/ 30 мая 2018

Код в конструкторе будет выполняться только один раз для каждого экземпляра страницы 2.

Но вы можете обработать событие Navigated для NavigationService в Page1 и вызвать метод DoSomething()Page2 в обработчике событий.Как то так:

void Next_btn(object sender, RoutedEventArgs e)
{
    this.NavigationService.Navigated += NavigationService_Navigated;

    if (this.NavigationService.CanGoForward)
        this.NavigationService.GoForward();
    else
        NavigationService.Navigate(new Page2());
}

private void NavigationService_Navigated(object sender, NavigationEventArgs e)
{
    var page2 = NavigationService.Content as Page2;
    if (page2 != null && someVar == 3)
        page2.DoSomething();

    this.NavigationService.Navigated -= NavigationService_Navigated;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...