C# 在不同窗口中单击按钮时调用函数(WPF应用程序)

C# 在不同窗口中单击按钮时调用函数(WPF应用程序),c#,wpf,C#,Wpf,我从wpf应用程序的一个页面启动了一个窗口,我想在按下子窗口中的按钮时调用一个函数 这是调用窗口的页面: namespace AppWpf10 { public partial class Prepare : System.Windows.Controls.Page { private void button_Click(object sender, RoutedEventArgs e) { Choice win2 = ne

我从wpf应用程序的一个页面启动了一个窗口,我想在按下子窗口中的按钮时调用一个函数

这是调用窗口的页面:

namespace AppWpf10
{
    public partial class Prepare : System.Windows.Controls.Page
    {
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Choice win2 = new Choice();
            win2.Show();
        }

        public void DoStuff()
        {
            //CODE THAT DOES STUFF
        }
    }
}
namespace appWpf10
{
    public partial class Choice : Window
    {
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}
窗口已启动:

namespace AppWpf10
{
    public partial class Prepare : System.Windows.Controls.Page
    {
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Choice win2 = new Choice();
            win2.Show();
        }

        public void DoStuff()
        {
            //CODE THAT DOES STUFF
        }
    }
}
namespace appWpf10
{
    public partial class Choice : Window
    {
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}
因此,我希望在另一个窗口中按下
DoStuff()
按钮1。我该怎么做?通过在
按钮1中调用
DoStuff()
,从子窗口单击
?或者通过添加事件“在另一个窗口中按下按钮1”


不管怎样,有人知道怎么写吗?提前谢谢

一种解决方案是在构造函数中提供父到子窗口,然后它可以调用其父方法:

private void button_Click(object sender, RoutedEventArgs e)
{
    Choice win2 = new Choice(this);
    win2.Show();
}


public partial class Choice : Window
{
    Prepare parent;

    public Choice(Prepare parent)
    {
        this.parent = parent;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        parent.DoStuff();
        this.Close();
    }
}

嗯,有很多种方法,从表面上看,你没有走MVVM路线,这很好。因此,在您的特定情况下,一种简单的方法是在实际创建子项时订阅子项的按钮单击事件,因为您将该按钮命名为:

namespace AppWpf10
{
    public partial class Prepare : System.Windows.Controls.Page
    {
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Choice win2 = new Choice();
            win2.Show();
            win2.button1.Click += clickEventHandler;
        }

        private void clickEventHandler(object sender, RoutedEventArgs e)
        {
            DoStuff();
        }

        public void DoStuff()
        {
            //
        }
    }
}

关于
parent.DoStuff(),我得到了这个错误行“'System.NullReferenceException'异常:对象未定义为对象的一个实例”(翻译不好)我使用B.K.的答案使其正常工作,但仍然非常感谢您。我不知道为什么会发生此错误。向我们展示更多代码-如何创建新窗口等。