如何从主窗口调用一个方法而不创建它的实例?
本文关键字:方法 创建 实例 一个 窗口 调用 | 更新日期: 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,也许是因为你只是用这个方法做了一些循环调用,它可以被修复?