我在窗口中有一个按钮,基本上可以通过某些代码(重试按钮)重新运行
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void btnRetry_Click(object sender, RoutedEventArgs e)
{
//TODO retry function
//MainWindow.Connect();
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
我基本上想在我的主窗口类中使用connect方法。但是,除非它是公共静态,否则我不能这样做。但是,如果我将Connect()更改为公共静态,则其中的所有控件都需要是静态的。我正在努力减少我的静态控制量;任何人都可以帮助重试方法吗?
答案 0 :(得分:0)
首先,您需要将方法设为公共(或内部),以便Window1
可以使用该方法。但是,不要让它静止。
相反,在MainWindow
构造函数中接受Window1
的实例,并将其存储,以便稍后可以在其上调用Connect()
方法。
例如:
public partial class Window1 : Window
{
private MainWindow mainWindow;
public Window1(MainWindow mainWindow)
{
if (mainWindow == null) {
throw new ArgumentNullException("mainWindow");
}
this.mainWindow = mainWindow;
InitializeComponent();
}
private void btnRetry_Click(object sender, RoutedEventArgs e)
{
mainWindow.Connect();
}
// ...
}
然后,如果从MainWindow
内部构造实例,则将构造函数调用从new Window1()
更改为new Window1(this)
。
答案 1 :(得分:0)
另一种解决方案是让Window1.btnRetry
对父表格
public MainWindow : Window
{
private void ShowWindow1()
{
var window1 = new Window1();
window1.btnRetry.Click += OnRetryClicked;
window1.ShowDialog();
}
private void OnRetryClicked(object sender, EventArgs e)
{
// will be called when window1.btnRetry is clicked.
// retry the connection.
Connect();
}
}