C# 从主窗口访问类的实例

C# 从主窗口访问类的实例,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我有一个带有MainWindow的应用程序和另一个名为MyClass的类。MyClass中有一个我需要从MainWindow类访问的方法。MyClass在应用程序加载时加载。如何从MainWindow调用MyClass中的方法而不创建MyClass的新实例: MyClass class = new MyClass(); ?听起来很可疑,但是你要做的就是让这个方法是静态的 public partial class MainWindow { public void MethodInMain

我有一个带有MainWindow的应用程序和另一个名为MyClass的类。MyClass中有一个我需要从MainWindow类访问的方法。MyClass在应用程序加载时加载。如何从MainWindow调用MyClass中的方法而不创建MyClass的新实例:

MyClass class = new MyClass();

听起来很可疑,但是你要做的就是让这个方法
是静态的

public partial class MainWindow
{
    public void MethodInMainWindow()
    {
        // Don't need to create a new instance of MyClass
        MyClass.MethodInMyClass();
    }
}

public class MyClass
{
    public static void MethodInMyClass()
    {
        //  ....
    }
}

对您的问题的直接回答是将类方法标记为静态。这将允许您在任何地方调用它

另一方面,这可能不是你真正需要的。因此,如果在应用程序类内部的应用程序开始时创建
MyClass
,则需要公开
MyClass
实例,例如,通过应用程序属性。请看示例代码

public class MyClass
{
    public void Method()
    {
        // ...
    }
}
应用程序的代码:

public partial class App
{
    public MyClass MyClassInstance { get; private set; }

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        MyClassInstance = new MyClass();
    }
}
以及调用类的方法的窗口的代码:

public partial class MainWindow : Window
{
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ((App)Application.Current).MyClassInstance.Method();
    }
}

你在哪里创建了
MyClass
?,你能展示一下代码吗?这也是我的怀疑。需要在主窗口中是公共的,我怀疑代码是错误的,需要在MethodInMyClass声明中也是静态的。我编辑了它,但被拒绝了。不知道为什么。@iltzotz是的,我改正了。这是这篇文章最重要的部分。我不知道您的编辑被拒绝的原因。+1在应用程序启动时创建一些东西和
静态
都可以被视为全局变量,但是如果您在
MyClass
中使用
static
对该方法的任何其他调用都无法利用实例状态。@NickFreeman,是的,这是显而易见的。我根据问题的细节描述了两种不同的方法。这就是我想要的。谢谢