我有一个WPF应用程序,它有一个主窗口和几个我导航到的页面:
例如,从一个页面到另一个页面,我使用:
NavigationService.Navigate(new MyPage1());
从我的主窗口显示我使用的页面:
_mainFrame.Navigate(new PageHome());
我的MainWindow上有一个公共功能,我想从内页调用。
我该怎么做?
答案 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的技术,这将是从其他类中调用其他类的一个类的完美方法(在多个项目中拆分的类所需)。
使公共函数成为接口的一部分
interface ISomeInterface { void RequierdMethod();}
public partial class RequiedImplementer: Window, ISomeInterface
{
void RequiredMethod() { }
}
Registry.RegisterInstance<ISomeInterface >(new RequiedImplementer()); //Initialize all interfaces and their corresponding in a common class.
在你的应用程序中的任何地方调用apt函数,如下所示
Registry.GetService<ISomeInterface>().RequiredMethod();
这里注册类是自定义创建的,只保存实例并在需要时返回。 接口应该被所有类引用。 当您需要多个项目的互操作时,此解决方案更有效。
答案 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());