Communicate between pages in wpf

亡梦爱人 提交于 2019-12-11 02:38:51

问题


I have two Pages and one MainWindow.. I load the Pages in two Frames.. Now I want to execute methods from each other.. How can I do this?

This is Page1.cs:

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

This is Page2.cs:

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

In my MainWindow the following happens:

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

Is there any way, to execute Method2 from Page1.cs, and Method1 from Page2.cs?

Regards


回答1:


One way to do this is through their common parent, the window.

Looking at this (modified accordingly)

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
}

from this question

you should be able to set a reference once a page is loaded to the other page .

Better yet, you might want to let the Pages know of their window parent and access the other page through it. Either way, is bad design, I'm telling you.

Is not a solution to be proud of, you might better look into MVVM, and go with it. Let me know if it worked for you.



来源:https://stackoverflow.com/questions/29802911/communicate-between-pages-in-wpf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!