如何从主窗口调用一个方法而不创建它的实例?

本文关键字:方法 创建 实例 一个 窗口 调用 | 更新日期: 2023-09-27 18:18:28

我在主窗口中有一个方法,我想在其他用户控件中调用这个方法。我不使用静态方法,因为我的主窗口不是静态的,我不能使它静态。所以我想用这个,但我不知道AS后面是什么我不知道我是否可以把一个方法是VAR?我也不能使另一个MainWindow实例,因为这会给我一个Stackoverflow异常。我怎么解决这个问题?

var myMethode= mainWindow.FindName("MyMethode") as (should be a methode);
if (myMethode!= null) 
{  
    //My code
}

如何从主窗口调用一个方法而不创建它的实例?

可以在非静态类上定义静态方法。

例如:

static void Main()
{
    Foo foo = new Foo();
    Foo.DoSomething();
    foo.DoSomethingElse();
}
public class Foo
{
    public static void DoSomething()
    {
        Console.WriteLine("DoSomething");
    }
    public void DoSomethingElse()
    {
        Console.WriteLine("DoSomethingElse");
    }
}

但是将MainWindow作为参数传递到用户控件中不是更好的解决方案吗?所以用户控件知道它属于哪个窗口,并且可以访问它的函数?(最好为此声明一个接口并传递该接口)。

这看起来像:

public interface IWindow
 {
     string SomeWindowActivity();
 }
 public class MyUserControl
 {
     public IWindow Window { get; set; }
     public void SomeActionOnUserControl()
     {
         string data = Window.SomeWindowActivity();
     }
 }
 public class MainWindow : IWindow
 {
     MyUserControl MyUserControl { get; set; }
     public MainWindow()
     {
         // Link the UserControl to the Window it's one. This can be done trough the 
         // constructor or a property
         MyUserControl.Window = this;
     }
     public string SomeWindowActivity()
     {
         // Some code...
         return "result";
     }
 }

试试这个

((MyMainWindow)Application.Current.MainWindow).Method()

在你的例子中,你不需要把MainWindow变成单例,你可以从Application中访问它。当前单例

Application.Current.MainWindow

希望能有所帮助

简短的回答:你不能。如果你想调用实例方法,你需要有一个实例。

MainWindow不是静态的这一事实并不妨碍你在其中定义静态方法,只要这些方法不使用其他实例成员,所以如果它是一个助手方法,你可以将它定义为静态并从其他地方调用,那么从MainWindow类中重构它可能是一个好主意。

如果它是一个非静态方法,你声称你不想创建MainWindow的第二个实例,为什么不在第一个实例上调用它,然后通过传递它到你的控件?

另外,如果创建MainWindow的另一个实例给你stackoverflow,也许是因为你只是用这个方法做了一些循环调用,它可以被修复?