从WPF中的页面内调用公共MainWindow函数

时间:2013-12-18 14:58:23

标签: c# wpf xaml

我有一个WPF应用程序,它有一个主窗口和几个我导航到的页面:

例如,从一个页面到另一个页面,我使用:

NavigationService.Navigate(new MyPage1());

从我的主窗口显示我使用的页面:

_mainFrame.Navigate(new PageHome());

我的MainWindow上有一个公共功能,我想从内页调用。

我该怎么做?

4 个答案:

答案 0 :(得分:6)

您不应该直接调用该方法。

您应该做的是在您的页面中举起一个活动,让MainWindow订阅该活动。然后,该事件处理程序可以调用相关方法。

在PageHome中:

public event EventHandler SomethingHappened;
private void MakeSomethingHappen(EventArgs e){
    if(SomethingHappened != null){
        SomethingHappened(this, e);
    }
}

在MainWindow中:

pageHome.SomethingHappened += new EventHandler(pageHome_SomethingHappened);

void pageHome_SomethingHappened(object sender, EventArgs e){
     MyMethod();
}

答案 1 :(得分:2)

还有一种使用Registry的技术,这将是从其他类中调用其他类的一个类的完美方法(在多个项目中拆分的类所需)。

  1. 使公共函数成为接口的一部分

    interface ISomeInterface { void RequierdMethod();}
    public partial class RequiedImplementer: Window, ISomeInterface 
    {
        void RequiredMethod() { }
    }
    
  2. Registry.RegisterInstance<ISomeInterface >(new RequiedImplementer()); //Initialize all interfaces and their corresponding in a common class.

  3. 在你的应用程序中的任何地方调用apt函数,如下所示

    Registry.GetService<ISomeInterface>().RequiredMethod();
    
  4. 这里注册类是自定义创建的,只保存实例并在需要时返回。 接口应该被所有类引用。 当您需要多个项目的互操作时,此解决方案更有效。

答案 2 :(得分:2)

以下解决方案可帮助我从另一个页面调用MainWindow函数;

((MainWindow)System.Windows.Application.Current.MainWindow).FunctionName(params);

答案 3 :(得分:-2)

虽然我更喜欢使用事件和代理的技术,但我展示了另一种解决方案。

var mainWnd = Application.Current.MainWindow as MainWindow;
if(mainWnd != null)
   mainWnd.Navigate(new MyPage1());