![](/img/trans.png)
[英]How should I pass data between WPF Windows involving `MainWindow` (C#)?
[英]How can I pass data between windows in my C# WPF application?
我的WPF应用程序的MainWindow中有一个登录表单。 如果用户成功登录,我想打开HomeWindow。 我的问题是我需要将adminID变量从MainWindow传递到HomeWindow。 我怎样才能做到这一点?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
int errors = 0;
if (txtUsername.Text == "")
{
lblUsernameStatus.Content = "This field is required.";
errors = errors + 1;
}
if (txtPassword.Text == "")
{
lblPasswordStatus.Content = "This field is required.";
errors = errors + 1;
}
if (errors == 0)
{
Administrator TryLogin = new Administrator();
if (TryLogin.VerifyUser(txtUsername.Text, txtPassword.Text))
{
HomeWindow home = new HomeWindow();
int adminID = TryLogin.userID;
home.Show();
this.Close();
}
else
{
lblLoginStatus.Content = TryLogin.status;
}
}
}
PS:我没有在HomeWindow.xaml.cs文件中写任何东西。
在HomeWindow
定义一个初始化程序,以接受您希望发送的数据:
private int AdminID;
public HomeWindow()
{
InitializeComponent();
}
public HomeWindow(int adminID) : base()
{
AdminID = adminID;
}
然后,您可以:
HomeWindow home = new HomeWindow(TryLogin.userID);
home.Show();
this.Close();
声明静态变量将是最简单,最简单的方法,因为一旦登录授权,该值就不会更改,直到注销(退出应用程序)为止。
我还使用了一种通过Window构造函数传递值的方法,但是静态变量更容易利用已登录用户的许多固定数据,例如为每个用户定制的设置数据。 我也有一个WPF应用程序,并传递11个值,并且可以轻松地在应用程序中的任何地方使用。
在MainWindow中声明为静态变量,例如,
public static int adminID;
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
adminID= TryLogin.userID;
}
在HomeWindow中的用法就像
MainWindow.adminID
希望这可以帮助..
有多种方法可以实现此目的。
这是使用单例的示例
public class User
{
private static readonly User _instance;
private static object syncRoot = new Object();
public string Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string SomeOtherProperty { get; set; }
private User()
{
// Initialize defaults
}
public void Reset()
{
// Clear existing values
}
public static User Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (_instance == null)
_instance = new User();
return _instance;
}
}
}
}
}
在您的登录表单上:
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
int errors = 0;
if (txtUsername.Text == "")
{
lblUsernameStatus.Content = "This field is required.";
errors = errors + 1;
}
if (txtPassword.Text == "")
{
lblPasswordStatus.Content = "This field is required.";
errors = errors + 1;
}
if (errors == 0)
{
Administrator TryLogin = new Administrator();
if (TryLogin.VerifyUser(txtUsername.Text, txtPassword.Text))
{
User.Instance.Reset(); // Make sure old data is removed
User.Instance.Username = txtUsername.Text;
User.Instance.Password = txtPassword.Text;
HomeWindow home = new HomeWindow();
int adminID = TryLogin.userID;
home.Show();
this.Close();
}
else
{
lblLoginStatus.Content = TryLogin.status;
}
}
}
在您的家庭表格上:
您可以使用User.Instance
检索用户凭据,只需确保在注销时将其重置即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.