Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值从窗口返回到类WPF_C#_Wpf_Return Value - Fatal编程技术网

C# 将值从窗口返回到类WPF

C# 将值从窗口返回到类WPF,c#,wpf,return-value,C#,Wpf,Return Value,在类中的一个方法中,我调用Login.Show(),这是一个登录窗口。我希望窗口在单击登录按钮时将电子邮件传递回类,而不创建类的新实例 有没有办法做到这一点 目前我有 Login loginWindow; public void AppStartup { loginWindow = new Login(); loginWindow.Show(); //in this instance I'd like the email to be returned here 在Log

在类中的一个方法中,我调用
Login.Show()
,这是一个
登录窗口。我希望窗口在单击登录按钮时将电子邮件传递回类,而不创建类的新实例

有没有办法做到这一点

目前我有

Login loginWindow;
public void AppStartup {
    loginWindow = new Login();
    loginWindow.Show();
    //in this instance I'd like the email to be returned here
Login.xaml.cs中

public void Login_Click(object sender, RoutedEventArgs e)
{
    string email;
    try {
        email = InputEmail.Text;
        //ideally I would like to return email to AppStartup without
        //using new AppStartup(); , rather back in the same instance
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message); 
    }
}

您可以调用
ShowDialog()
而不是
Show()
来显示窗口,然后直接访问
InputEmail
控件的
Text
属性:

loginWindow = new Login();
loginWindow.ShowDialog();
string email = loginWindow.InputEmail.Text;
Show()
不同,
ShowDialog()
在窗口关闭之前不会返回

或者,您可以将属性添加到
登录
窗口或其
数据上下文
,并在单击按钮时设置此属性

public string Email { get; set; }

public void Login_Click(object sender, RoutedEventArgs e)
{
    Email = InputEmail.Text;
}


我会阅读WPF的
mvvm
&
binding
,只需向LoginWindow类添加一个公共属性,并在Login\u Click Handler中设置它,您知道,使用
Console.WriteLine(例如Message)是很棘手的方法?您可能希望使用
ShowDialog()
而不是
Show()
。然后你可以在通话后访问成员变量@Jon suggest。我试过了,但它似乎不起作用,它不会等待登录。\u单击,所以“email”值始终为零。是否需要使用while循环并等待触发登录单击?您需要调用
ShowDialog()
,而不是
Show()
。你真的尝试过这个吗?是的,但它会立即通过showdialog和email=window.email运行,因此它永远不会给它更新的机会,就像在等待登录单击发生一样。我几乎需要它像等待登录点击?这有意义吗?没有,
ShowDialog
在关闭
loginWindow
之前不会返回。你不能在窗口关闭后单击按钮…它需要在调用ShowDialog的方法继续下一行之前关闭…如果你不想这样做,你可以从登录窗口引发事件,并在你的应用程序类中处理。
string email = loginWindow.Email;