在另一个类中重试按钮访问方法

时间:2012-11-19 15:57:03

标签: c# wpf button window

我在窗口中有一个按钮,基本上可以通过某些代码(重试按钮)重新运行

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()更改为公共静态,则其中的所有控件都需要是静态的。我正在努力减少我的静态控制量;任何人都可以帮助重试方法吗?

2 个答案:

答案 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();
      }
}