我在Mainwindow中有一个方法,我想在其他用户控件中调用此方法。 我不使用静态方法,因为我的MainWindow不是静态的,我不能使它静态。 所以我想出来使用它,但我不知道AS背后是什么,我不知道我是否可以把一个方法是VAR? 我也无法创建另一个MainWindow实例,因为这给了我一个Stackoverflow异常。 我该如何解决这个问题?
var myMethode= mainWindow.FindName("MyMethode") as (should be a methode);
if (myMethode!= null)
{
//My code
}
答案 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,也许是因为你刚用这个方法做了一些循环调用,它可以修复吗?