是否可以从另一个类引用MainWindow.cs?

时间:2012-12-19 01:23:27

标签: c# wpf

我有一个带有几个类的WPF / C#程序,MainWindow.cs类有用户控件,我想用其他类中发生的计算状态来更新。在谷歌搜索并借用示例后,我想出了如何在其他类中设置一个Event,并在更改内容时调用它。然后只要主类具有绑定该事件的处理程序,我就可以适当地更新UI内容(状态栏等)。下面是我正在做的精简版:

    namespace Program
     {
     public partial class MainWindow : Window
     {
          public void SetUpHandler()
          {
               TestA.WorkerProgressThingie += new    ProgressChangedEventHandler(TestA_ProgressChanged);
          }
          void TestA_ProgressChanged(object sender, ProgressChangedEventArgs e)
          {
               progressBar1.Value = e.ProgressPercentage
          }

     }




    public class TestA    
{
    public static event ProgressChangedEventHandler WorkerProgressThingie;

    public static void SomeFunction()
    {   
        int value = 0;         

        //...(some boring code that does something here)

        ProgressChangedEventArgs e = new ProgressChangedEventArgs(value, null);            

        if (WorkerProgressThingie != null)
            WorkerProgressThingie.Invoke(null, e)
    }


}
}
  • 有没有办法简单地从另一个类调用progressBar属性? (即MainWindow.progressBar.Value)?
  • 调用事件时“对象发送者”参数的用途是什么,它应该如何正常使用?我看到的例子总是使用'​​null'。

谢谢!

1 个答案:

答案 0 :(得分:2)

1)是的,如果声明为public,您可以访问任何类的任何部分。在这种情况下,您可以将progressBar控件声明为public,并且任何引用class MainWindow的内容都可以使用它。然而,这将是非常糟糕的做法。相反,您可以绑定一些“值”,该值与活动的当前进度相关的更新,并让MainWindow类担心它如何表示该更改(在这种情况下通过更新ProgressBar),

2)所有事件中的object sender都是对引发事件的对象的引用,因此事件使用者知道事件的来源。使用null也是IMO的不良做法,一般来说,引发事件的对象应该这样做;

SomeEvent(this, someEventArgs);