我有使用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.
}
}
}
答案 0 :(得分:2)
您可以将事件添加到第二个窗口。在MenuItem_Click
(MainWindow
)内订阅,然后从第二个窗口(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#中的事件和代理。