![](/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.