Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF MVVM应用程序中成功登录关闭LoginView?_Wpf_Mvvm_Autowired - Fatal编程技术网

如何在WPF MVVM应用程序中成功登录关闭LoginView?

如何在WPF MVVM应用程序中成功登录关闭LoginView?,wpf,mvvm,autowired,Wpf,Mvvm,Autowired,我在MVVM架构中有一个WPF应用程序。 当应用程序加载时,我需要显示一个“登录”窗口,用户在其中输入用户名和密码 然后将其传递给ServiceLocator,后者创建连接到WCF服务的客户端 问题: 客户端成功连接后,如何关闭“登录”窗口,而不使用视图的.cs文件中的任何代码?我使用a进行登录并公开事件 event EventHandler<RequestCloseEventArgs> RequestCloseDialog; 这都在我的OnStartup()中,是的,这是我的ap

我在MVVM架构中有一个WPF应用程序。 当应用程序加载时,我需要显示一个“登录”窗口,用户在其中输入用户名和密码

然后将其传递给ServiceLocator,后者创建连接到WCF服务的客户端

问题:

客户端成功连接后,如何关闭“登录”窗口,而不使用视图的.cs文件中的任何代码?

我使用a进行登录并公开事件

event EventHandler<RequestCloseEventArgs> RequestCloseDialog;

这都在我的
OnStartup()
中,是的,这是我的
app.xaml
中的代码,但这是我的应用程序根目录,这就是为什么我可以这样做。我没有AppViewModel或类似的东西,因为
app.xaml
永远不会“显示”给用户。

您可以覆盖应用程序类的OnStartup方法,在该方法中,您可以作为对话框打开登录屏幕,一旦用户输入有效数据,您可以在关闭登录屏幕时返回布尔值,您可以根据布尔值执行进一步的逻辑。

我通常在IDialogService实现中向ViewModel传递关闭操作

public void ShowDialog(IDialogViewModel vm)
{
    // create the dialog view
    ...
    vm.CloseAction = () => dialog.Close();
    dialog.DataContext = vm;
    ...
    // show the dialog 
    dialog.ShowDialog();
}

隐藏主窗口。在成功登录的情况下显示它。登录窗口应与MVVM中的任何其他对话框一样处理。如何在“OnStartup”中使用它?你能发布一个代码示例吗?就像@pchajer所说的:这不是违反了MVVM吗?因为逻辑是用代码编写的,这是针对MVVM的?不,因为我没有引用视图的viewmodel。对于我来说,app.xaml.cs不是“查看代码隐藏”,而是我的应用程序根。
public void ShowDialog(IDialogViewModel vm)
{
    // create the dialog view
    ...
    vm.CloseAction = () => dialog.Close();
    dialog.DataContext = vm;
    ...
    // show the dialog 
    dialog.ShowDialog();
}