我正在使用用户注册和登录创建简单的待办事项列表 WPF应用程序,每个用户都可以在其中添加和删除待办事项列表和项目,并且保存了所有内容由MSSQL数据库中的实体框架提供。
所以我的问题是,在关闭第一个“登录窗口”后,如何将刚刚登录的用户的[用户ID]重定向到另一个窗口“主窗口”?
我正在使用用户注册和登录创建简单的待办事项列表 WPF应用程序,每个用户都可以在其中添加和删除待办事项列表和项目,并且保存了所有内容由MSSQL数据库中的实体框架提供。
所以我的问题是,在关闭第一个“登录窗口”后,如何将刚刚登录的用户的[用户ID]重定向到另一个窗口“主窗口”?
穆罕默德。在运行中,我必须为您的方法提供快速的想法。首先,您可以建立一个事件,当您的登录窗口关闭时,将触发该事件。此事件会将用户ID作为事件参数。如果您的主窗口将订阅此事件,它将识别该值。第二种方法将是一个完整的过程。我稍微深一些,但实际上不是很复杂。在不同的类和视图之间传递值是完全正常的。要打开一个新类,您总是想调用该类的构造函数。在调用构造函数时,您可以将值传递给它们。我必须为您链接两个想法。希望其中之一能为您提供帮助。
构造函数的方式:https://www.geeksforgeeks.org/c-sharp-constructors/
事件发生的方式:https://www.tutorialspoint.com/csharp/csharp_events.htm
干杯,保罗。
,有几种方法可以做到这一点。一种方法是从窗口返回结果,然后从App.xaml.cs传递给另一种方法。
在您的App.xaml中,将startupuri(指向窗口)更改为startup(指向方法)。
它应该看起来像这样。
<Application x:Class="TSMV.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TSMV"
**Startup="ApplicationStart"**
>
</Application>
ApplicationStart应该实现显示一个窗口然后从中获取结果的逻辑。您可以采用不同的方法来获取数据,例如DialogResult,存储在SingletonObject中,调用窗口的方法等。主要思想是将这些数据传递给新窗口。
查看应用程序开始我在项目中使用的内容,这可以给您一些想法。
private void ApplicationStart(object sender,StartupEventArgs e)
{
iwndwMain = new MainWindow();
WindowInitiations();
}
public bool ShouldMoveOn {get;set;}
private void WindowInitiations()
{
LoginProcess();
MainWindowProcess();
}
private void LoginProcess()
{
var vmLogOn = new VMLogon(); //LogOn ViewModel
try
{
LoginResult = SingletonData.Instance.GlobalDialogSerivce.ShowDialog(vmLogOn);
ShouldMoveOn = vmLogOn.MoveOn;
//SingletonData.Instance.GlobalUserSessionData = vmLogOn.UserSessionData; //Only when this data is filled,we can initiate the VMTimeSheet
}
catch (Exception)
{
string message = @"Unable to start the application. If this is a server issue,please try after sometime or try contacting the admin";
VMConfirmationWindow vmconf = new VMConfirmationWindow(message);
SingletonData.Instance.GlobalDialogSerivce.ShowDialog(vmconf);
}
}
private void MainWindowProcess()
{
if (ShouldMoveOn) //Log In is Success
{
iwndwMain.ShowDialog();
if (VMMain.Instance.ViewModelLogOn.IsLoggedOut == true)
{
WindowInitiations(); //if the user logs out,then repeat the process and show the login window
}
else
{
Application.Current.Shutdown();
}
}
else
{
Application.Current.Shutdown();
}
}
}
我首先使用Viewmodel,并实现了IOC容器来显示窗口和对话框。 (注意:我正在使用Haley.Flipper.MVVM nuget软件包进行MVVM接线。)。如果希望使用IOC方法或实现自己的方法,则可以使用不同的MVVM库。
因此,我在上面所做的是,我在登录窗口的视图模型内创建了一个布尔属性“ MoveOn”。登录过程成功后,我将此属性设置为true。(默认情况下为false)
登录过程完成后,我检查boolean属性,然后基于此属性启动要显示的主窗口。