从LoginWindow到MainWindow获取一个字符串?

时间:2016-05-11 08:12:03

标签: c# .net wpf visual-studio

我有从Application_Startup运行的LoginWindow.xaml。 我正在尝试将UserName字符串从LoginWindow传递到MainWindow。

如果您正确登录,LoginWindow会关闭并且MainWindow会打开,如何存储来自LoginWindow的字符串?

更新: 我正在尝试将我的UserName字符串存储在newTest.MyProperty中,但是当它到达MainWindow时它是null。

我已经遗漏了很多代码,因为很多代码都不相关。 代码示例: App.xaml中

<Application x:Class="PasswordSafe.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:PasswordSafe"
         StartupUri="MainWindow.xaml"
         Startup="Application_Startup"
         ShutdownMode="OnExplicitShutdown">

App.xaml.cs

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        LoginWindow nLW = new LoginWindow();
        nLW.ShowDialog();
    }
}

LoginWindow.xaml.cs

private void ButtonLogin_Click(object sender, RoutedEventArgs e)
    {
        StartUp();
        string userN = TextBoxUserName.Text;

        using (var db = dbFactory.Open())
        {
            db.CreateTableIfNotExists<User>();
            User newUser = db.Select<User>().Where(use => use.UserName.Equals(userN)).FirstOrDefault();
            if (true)
            {
                if (newEncrypt.GetMD5(TextBoxPassword.Text) == newUser.MasterPassword)
                {
                    Test newTest = new Test();
                    newTest.MyProperty = newUser.UserName;
                    this.Close();
                }

test.cs中

class Test
{
    public string MyProperty { get; set; }
}

3 个答案:

答案 0 :(得分:2)

到目前为止,你做得很好但只有一件事

class Test
{
    public static string MyProperty { get; set; }
}

使用static字符串将字符串作为Test.MyProperty访问 为什么是静态?,因为在应用程序启动时会创建static变量,并在应用程序关闭时删除它,这样您的数据仍会存在,直到您关闭应用程序但如果不使用{{ 1}}从当前类移动时将删除该值。

答案 1 :(得分:0)

您正在为新的Test类实例设置此字段。您需要定义一个静态类。

答案 2 :(得分:0)

Username班级设置公开LoginWindow媒体资源:

public string Username { get; set; }

当用户登录时,设置它。

然后在执行nLW.ShowDialog()的代码之后,您可以获取nLW.Username属性,然后将其传递给ctor MainWindow string username nLW.ShowDialog(); // Your current code var username = nLW.Username; var mainWindow = new MainWindow(username); mainWindow.Show(); )作为一个参数:

EventAggregator

编辑进一步提示:如果可能,请使用MVVM设计模式。它使您的代码更清晰,更模块化。

与此同时,请考虑使用chars在视图模型之间发送“消息”。我可以推荐Prism,因为它可以非常轻松地完成所有这些操作并且很容易设置。

希望这有帮助! :)