簡體   English   中英

如何在C#WPF應用程序的Windows之間傳遞數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM