2

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

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

问题 :

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

4

3 回答 3

1

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

public void ShowDialog(IDialogViewModel vm)
{
    // create the dialog view
    ...
    vm.CloseAction = () => dialog.Close();
    dialog.DataContext = vm;
    ...
    // show the dialog 
    dialog.ShowDialog();
}
于 2012-07-12T08:24:14.700 回答
0

我使用对话服务登录并公开事件

event EventHandler<RequestCloseEventArgs> RequestCloseDialog;

当客户端成功登录时关闭对话框。

编辑:这是一个例子

在你的app.xaml.cs

protected override void OnStartup(StartupEventArgs e)
{
    var result = this._dialogService.Show("Login",this._myloginviewmodel);

    // When use click cancel in the login dialog
    if(!result)
    { 
        // Close app or whatever
    }

    // Access the properties of myloginviewmodel if you want

    // Now the only part of my app where I use view-first instead of viewmodel-first
    this.MainWindow = new MainWindow(_mainwindowviwemodel);
    this.MainWindow.Show();
}

这就是我的全部内容OnStartup(),是的,这就是我的代码隐藏app.xaml,但这是我的应用程序根目录,这就是为什么这对我来说没问题。我没有 AppViewModel 或类似的东西,因为app.xaml永远不会“显示”给用户。

于 2012-07-12T07:17:44.577 回答
0

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

于 2012-07-12T07:21:58.223 回答