C# 是否可以从其他类引用MainWindow.cs?

C# 是否可以从其他类引用MainWindow.cs?,c#,wpf,C#,Wpf,我有一个WPF/C#程序,它有几个类,MainWindow.cs类有用户控件,我想用其他类中发生的计算状态来更新这些控件。在谷歌搜索和借鉴示例之后,我发现了如何在另一个类中设置事件,并在发生变化时调用它。然后,只要主类有一个绑定该事件的处理程序,我就可以适当地更新UI内容(状态栏等)。下面是我所做工作的精简版本: namespace Program { public partial class MainWindow : Window {

我有一个WPF/C#程序,它有几个类,MainWindow.cs类有用户控件,我想用其他类中发生的计算状态来更新这些控件。在谷歌搜索和借鉴示例之后,我发现了如何在另一个类中设置事件,并在发生变化时调用它。然后,只要主类有一个绑定该事件的处理程序,我就可以适当地更新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)
  • 当我调用事件时,“object sender”参数的用途是什么,它应该如何正常使用?我看到的示例总是使用“null”
谢谢

1)是的,您可以访问任何类的任何部分,只要它声明为
public
。在本例中,您可以将progressBar控件声明为public,任何引用了
class MainWindow
的控件都可以对其进行修改。然而,这将是相当糟糕的做法。相反,您可以绑定到某个“值”,该值根据活动的当前进度进行更新,并让MainWindow类担心它如何表示该更改(在本例中,通过更新ProgressBar)

2)
所有事件中的对象发送方
都是对引发事件的对象的引用,因此事件使用者知道事件来自何处。在我看来,使用null也是一种糟糕的做法,一般来说,引发事件的对象应该这样做

SomeEvent(this, someEventArgs);

谢谢非常有用。我想知道,你能解释一下绑定到一个值是什么意思吗?您的意思是将进度条绑定到外部类(即TestA类)中的一个值吗?如果您是在WPF;中开发的,也许可以阅读一下MVVM体系结构。视图应该直观地表示ViewModel的状态,在本例中,它就是计算任务进度的对象。感谢您的提示。根据链接找到了另一篇更具体的文章,内容非常丰富。在此处为其他人发布:“使用数据绑定和WPF自定义数据显示”()