我有从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; }
}
答案 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,因为它可以非常轻松地完成所有这些操作并且很容易设置。
希望这有帮助! :)