C# 从窗口1到主窗口c的触发事件#

C# 从窗口1到主窗口c的触发事件#,c#,.net-4.0,C#,.net 4.0,可能重复: 相关信息:使用WPF应用程序,C#,Visual Studio 2010,.Net 4 我有两个窗口:Window1和MainWindow。在Window1中,我有一个复选框,选中该复选框后,会将MainWindow中的label1设置为不可见。我该怎么办 我无法执行MainWindow newWindow=newmainwindow(),因为我没有尝试创建新的主窗口。我尝试了以下代码,但引发了异常:{“对象引用未设置为对象的实例。”}` 最好的办法是什么?感谢您的高级支持。将事件

可能重复:

相关信息:使用WPF应用程序,C#,Visual Studio 2010,.Net 4

我有两个窗口:Window1和MainWindow。在Window1中,我有一个复选框,选中该复选框后,会将MainWindow中的label1设置为不可见。我该怎么办

我无法执行
MainWindow newWindow=newmainwindow()
,因为我没有尝试创建新的主窗口。我尝试了以下代码,但引发了异常:{“对象引用未设置为对象的实例。”}`


最好的办法是什么?感谢您的高级支持。

将事件添加到
窗口1

public event Action<bool> SomethingChecked; //TODO rename to indicate what was checked
然后从主窗体添加事件处理程序:

Window1 other = new Window1();
other.SomethingChecked += checked => label1.Visibility = 
    checked ? Visibility.Visible : Visibility.Hidden;

在Window1中创建事件,在MainWindow中处理该事件

只是下面的一个例子,并不是真正的工作代码

MainWindow
{
    private void SomeStuff()
    {
        Window1 window = new Window1();
        window.CheckBoxClick += new OnCheckBoxClick(SomeMethod);
    }

    private void SomeMethod(bool state)
    {
         // use state;
    }
}

我刚从这个建议开始,你的建议更好:)我应该把“然后从主窗体添加事件处理程序:”的代码放在哪里?我只是让它漂浮在我的主窗口类?我的Window1是全局声明的,所以我想我是在问,我应该把
other.SomethingChecked+=checked=>label1.Visibility=checked放在哪里?可见性.可见:可见性.隐藏因为Window1是全局声明的,所以我假设有一个Window1的全局实例可用。您可以在MainWindow Load方法中声明事件处理程序。@BADDAK您可能应该在创建子窗体的实例之后立即添加事件处理程序<代码>我的Window1全局声明
您真的不应该这样做。您应该始终保持变量的范围尽可能窄。1)您没有演示如何定义事件2)您分配事件处理程序的语法错误。哦,是的。。。我没有意识到我的“并非真正有效的代码”根本不起作用>;编译器将根据您声明的事件推断委托类型。
Window1 other = new Window1();
other.SomethingChecked += checked => label1.Visibility = 
    checked ? Visibility.Visible : Visibility.Hidden;
MainWindow
{
    private void SomeStuff()
    {
        Window1 window = new Window1();
        window.CheckBoxClick += new OnCheckBoxClick(SomeMethod);
    }

    private void SomeMethod(bool state)
    {
         // use state;
    }
}