Общаться между страницами в 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
и идти с этим. Дайте мне знать, если это сработало для вас.