如何在不创建实例的情况下从MainWindow调用方法?

时间:2011-12-19 08:48:15

标签: c# wpf

我在Mainwindow中有一个方法,我想在其他用户控件中调用此方法。 我不使用静态方法,因为我的MainWindow不是静态的,我不能使它静态。 所以我想出来使用它,但我不知道AS背后是什么,我不知道我是否可以把一个方法是VAR? 我也无法创建另一个MainWindow实例,因为这给了我一个Stackoverflow异常。 我该如何解决这个问题?

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

3 个答案:

答案 0 :(得分:1)

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

例如:

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";
     }
 }

答案 1 :(得分:1)

尝试this

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

你不需要在你的情况下制作MainWindow单例,你可以从Application.Current单例访问它

Application.Current.MainWindow

希望这有帮助

答案 2 :(得分:0)

短暂的保持:你不能。你想调用一个实例方法,你需要有一个实例。

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

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

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