C# 是否可以从其他类引用MainWindow.cs?
我有一个WPF/C#程序,它有几个类,MainWindow.cs类有用户控件,我想用其他类中发生的计算状态来更新这些控件。在谷歌搜索和借鉴示例之后,我发现了如何在另一个类中设置事件,并在发生变化时调用它。然后,只要主类有一个绑定该事件的处理程序,我就可以适当地更新UI内容(状态栏等)。下面是我所做工作的精简版本:C# 是否可以从其他类引用MainWindow.cs?,c#,wpf,C#,Wpf,我有一个WPF/C#程序,它有几个类,MainWindow.cs类有用户控件,我想用其他类中发生的计算状态来更新这些控件。在谷歌搜索和借鉴示例之后,我发现了如何在另一个类中设置事件,并在发生变化时调用它。然后,只要主类有一个绑定该事件的处理程序,我就可以适当地更新UI内容(状态栏等)。下面是我所做工作的精简版本: namespace Program { public partial class MainWindow : Window {
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”
public
。在本例中,您可以将progressBar控件声明为public,任何引用了class MainWindow
的控件都可以对其进行修改。然而,这将是相当糟糕的做法。相反,您可以绑定到某个“值”,该值根据活动的当前进度进行更新,并让MainWindow类担心它如何表示该更改(在本例中,通过更新ProgressBar)
2) 所有事件中的对象发送方
都是对引发事件的对象的引用,因此事件使用者知道事件来自何处。在我看来,使用null也是一种糟糕的做法,一般来说,引发事件的对象应该这样做
SomeEvent(this, someEventArgs);
谢谢非常有用。我想知道,你能解释一下绑定到一个值是什么意思吗?您的意思是将进度条绑定到外部类(即TestA类)中的一个值吗?如果您是在WPF;中开发的,也许可以阅读一下MVVM体系结构。视图应该直观地表示ViewModel的状态,在本例中,它就是计算任务进度的对象。感谢您的提示。根据链接找到了另一篇更具体的文章,内容非常丰富。在此处为其他人发布:“使用数据绑定和WPF自定义数据显示”()