Общаться между страницами в wpf

У меня есть две страницы и одно MainWindow.. Я загружаю страницы в двух кадрах.. Теперь я хочу выполнять методы друг от друга.. Как я могу это сделать?

Это Page1.cs:

public partial class Page1 : Page
{
    public Method1()
    {
        doSomething;            
    }
}

Это Page2.cs:

public partial class Page2 : Page
{
    public Method2()
    {
        doSomethingElse;            
    }
}

В моем MainWindow происходит следующее:

Frame1.Source = new Uri("/Source/Pages/Page1.xaml", UriKind.RelativeOrAbsolute);
Frame2.Source = new Uri("/Source/Pages/Page2.xaml", UriKind.RelativeOrAbsolute);

Есть ли способ выполнить Method2 из Page1.cs и Method1 из Page2.cs?

С уважением

1 ответ

Решение

Один из способов сделать это - через их общего родителя - окно.

Глядя на это (изменено соответственно)

public partial class MainWindow : Window
{
    public Page1 Page1Ref = null;
    public Page1 Page2Ref = null;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Frame1.Source = new Uri("/Source/Pages/Page1.xaml", UriKind.Relative);
        Frame1.ContentRendered += Frame1_ContentRendered;

        // do the same for the Frame2
    }

    private void Frame1_ContentRendered(object sender, EventArgs e)
    {
        var b = Frame1.Content as Page1; // Is now Home.xaml
        Page1Ref = b;
        if(Page2Ref != null) // because you don't know which of the pages gets rendered first
        {
           Page2Ref.Page1Ref = Page1Ref; // add the Page1Ref prop to your Page2 class 
           Page1Ref.Page2Ref = Page2Ref;  // here the same
        }

    }
    // do the same for the other page
}

из этого вопроса

Вы должны иметь возможность установить ссылку после загрузки страницы на другую страницу.

А еще лучше, вы можете сообщить Страницам своего родительского окна и получить доступ к другой странице через него. В любом случае, плохой дизайн, я вам говорю.

Это не решение, которым можно гордиться, вы могли бы лучше заглянуть в MVVMи идти с этим. Дайте мне знать, если это сработало для вас.

Другие вопросы по тегам