【问题标题】:How do I return an object from a dialog when using WindowManager in Caliburn Micro在 Caliburn Micro 中使用 WindowManager 时如何从对话框中返回对象
【发布时间】:2011-11-01 06:30:28
【问题描述】:

我刚开始使用 Caliburn Micro WindowManager。

我已经设法显示一个包含我的 WPF 视图的模式对话框。

我需要从对话框中返回一个对象。最好的方法是什么?

背景 - 这是一个登录对话框。我需要验证用户名和密码并返回用户配置信息。

【问题讨论】:

    标签: wpf caliburn.micro


    【解决方案1】:

    我可以想到两种方法来做到这一点。我假设您的 Login 视图模型类派生自 Caliburn.Micro.Screen。

    1) 让视图模型(代表您的登录屏幕)公开一个返回用户配置的属性。然后,您可以在成功登录后访问它,如下所示:

    var windowManager = new WindowManager();
    var login = new MyLoginViewModel();
    if (windowManager.ShowDialog(login) == true)
    {
        var configurationInfo = login.MyUserConfigurationInfo;
    }
    

    2) 成功登录后,将用户配置信息添加到应用程序的资源字典中。下面的示例显示了您在登录视图模型中的“登录”方法中设置它。

    void Login()
    {
        /* Authentication Logic success */
        App.Current.Resources["UserConfigurationInfo"] = new UserConfigurationInfo();
        TryClose(true);
    }
    

    【讨论】:

    • 谢谢阿德里安。你的第一个建议看起来最好。如何从登录视图模型在窗口管理器上设置结果,以便我可以测试为真?
    • 它就像第二个选项一样工作,除了你设置属性而不是一些应用程序资源。本质上,当用户在 LoginViewModel 中进行身份验证时,您会在该点将 LoginViewModel 的“MyUserConfigurationInfo”属性设置为该类型的实例。
    【解决方案2】:

    我不知道 Caliburn Micro WindowManager,但如果您的模态对话框视图有一个视图模型,那么将视图模型用于您可以访问您的对象的地方怎么样?

    在我的项目中有一个 ILoginViewModel,我在我的 app.cs 中的 DialogResult=true 之后使用它。 (我使用 MEF 导出此信息,因此我的模块很容易访问)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 2012-05-22
      • 1970-01-01
      • 2017-06-26
      • 2014-02-09
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多