如何处理第二个窗口

时间:2013-06-09 11:21:15

标签: c# wpf

我有使用ASP.Net MVC设计网站的经验。

我现在想要能够处理WPF。所以,我正在开发一个小应用程序,以学习一些主题,如线程,文件流等。

但是,我的问题似乎非常基本:

我的主窗口上有一个按钮,可以触发一个调用另一个窗口的动作。新的windows'aim是获得2个字符串和2个双打,将它们发送回主窗口。

我的问题是,主窗口没有以这种方式启动:

MainWindow m = new mainwindow;

我想做点什么:

m.someVariable = somethingFromMySecondWindow.

所以,我试着将主窗口设置为静态,但是我遇到了很多错误,所以我删除了“静态”。 我无法从第二个窗口或任何公共方法访问变量。

我不知道是否需要它,但这里是我已编写的c#代码。

mainWindow:

namespace FlightPlanningDraft1
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    private string _ACModel;
    private string _ACIdentification;
    private double _ACFuelConsumption;
    private double _ACTotalFuel;


    public MainWindow()
    {
        InitializeComponent();
    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        ChargementAvion c = new ChargementAvion();
        c.Show();
    }

    public void Validation_Avion(string aCModel,string aCIdentification, double aCFuelConsumption, double aCTotalFuel)
    {
        _ACModel = aCModel;
        _ACIdentification = aCIdentification;
        _ACFuelConsumption = aCFuelConsumption;
        _ACTotalFuel = aCTotalFuel;
    }

}
}

我的第二个窗口

namespace FlightPlanningDraft1
{
/// <summary>
/// Logique d'interaction pour ChargementAvion.xaml
/// </summary>
public partial class ChargementAvion : Window
{

    public ChargementAvion()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        //I don't know what to do here.
    }


}
}

1 个答案:

答案 0 :(得分:2)

您可以将事件添加到第二个窗口。在MenuItem_ClickMainWindow)内订阅,然后从第二个窗口(Button_Click)触发该事件。

您可以将任何值传递给您的活动。

public partial class ChargementAvion :Window
{
   public event Action<string> OnDone;

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if(OnDone != null)
        { 
           OnDone("any string you want to pass");
        }
    }
}

并在MainWindow中:

private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        ChargementAvion c = new ChargementAvion();
        c.OnDone += ResultsHandler;
        c.Show();
    }

  public void ResultsHandler(string result)
  {
     //do what you want ;)
  }

我建议你仔细查看this article。只是为了更熟悉C#中的事件和代理。