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

时间:2013-01-24 23:13:13

标签: c# .net-4.0

  

可能重复:
  Updating One Form After Event Occurs in Another Form

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

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

我无法做MainWindow newWindow = new MainWindow(),因为我不想创建一个新的主窗口。我尝试了以下代码,但是我抛出了异常:{“对象引用未设置为对象的实例。”}`。

private void checkBox4_Checked(object sender, RoutedEventArgs e)
{
   if (checkBox4.IsChecked == true)
   {
       (Application.Current.MainWindow as MainWindow).label1.Visibility = 
                   Visibility.Hidden;
   }
   else
   {
       (Application.Current.MainWindow as MainWindow).label1.Visibility = 
                   Visibility.Visible;
   }
}

最好的方法是什么?谢谢你提前。

2 个答案:

答案 0 :(得分:2)

Window1添加活动:

public event Action<bool> SomethingChecked; //TODO rename to indicate what was checked

选中此复选框后,提起该事件:

private void checkBox4_Checked(object sender, RoutedEventArgs e)
{
    if(SomethingChecked != null)
        SomethingChecked(checkBox4.IsChecked);
}

然后从主窗体中添加一个事件处理程序:

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

答案 1 :(得分:0)

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

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

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

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