在WPF应用程序中关闭登录窗口后,如何传递已登录到另一个窗口的“用户ID”?

我正在使用用户注册和登录创建简单的待办事项列表 WPF应用程序,每个用户都可以在其中添加和删除待办事项列表和项目,并且保存了所有内容由MSSQL数据库中的实体框架提供。


所以我的问题是,在关闭第一个“登录窗口”后,如何将刚刚登录的用户的[用户ID]重定向到另一个窗口“主窗口”?

zrzrzr0527 回答:在WPF应用程序中关闭登录窗口后,如何传递已登录到另一个窗口的“用户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属性,然后基于此属性启动要显示的主窗口。

本文链接:https://www.f2er.com/3106697.html

大家都在问