【问题标题】:How to implement Close button in MVVMCross WPF application?如何在 MVVMCross WPF 应用程序中实现关闭按钮?
【发布时间】:2013-07-20 23:25:16
【问题描述】:

我在我的 WPF 应用程序中使用 MVVMCross,我想提供一个 Close(或 Exit ) 按钮关闭整个应用程序。有没有使用 MVVMCross 功能的简单方法来做到这一点?

我用MainViewModel 尝试了以下方法:

public class MainViewModel : MvxViewModel
{
    private MvxCommand _closeCommand;
    public MvxCommand CloseCommand {
        get { 
            return _closeCommand ?? (_closeCommand = new MvxCommand(DoClose));
        }
    }

    public void DoClose() {
        Close(this);
    }
}

不幸的是,无济于事。当我按下一个绑定到CloseCommand 的按钮时,DoClose 方法会被调用,但是视图模型(和相应的视图)无法关闭,即使 WPF App StartupUri 设置为MainView.

【问题讨论】:

  • 你试过Application.Current.Shutdown(); ?
  • 谢谢,@Nitesh。但是,理想情况下,我想在可移植视图模型中管理应用程序关闭。 Application.Current.Shutdown 在 PCL“核心”项目中不可用。
  • 好的,那么我也想得到这个问题的答案。

标签: c# wpf mvvmcross


【解决方案1】:

许多 MvvmCross 平台不支持应用程序自行关闭 - 这在 iOS、WindowsPhone、Android、WindowsPhone 等中的行为不受欢迎 - 那里的公共 API 不支持 - 所以这不是一个常见的跨平台请求。

但是,如果您想为那些支持它的平台实现此功能,那么我认为最好的放置位置可能是在演示器中或在自定义 UI 注入服务中。


要将其放入自定义演示者中,只需:

  • 创建自定义演示者类(基于MvxWpfViewPresenter.cs
  • 在您的 Setup.cs 中覆盖 CreatePresenter 方法,返回此类的实例
  • 在您的自定义演示者中覆盖 ChangePresentation 方法 - 此方法可能使用 Close 发送的“众所周知的”MvxClosePresentationHint.cs,或者它可以使用您定义并通过 @ 发送的新自定义演示提示987654328@ 在 ViewModel 中。

要将此功能改为某些自定义 UI 服务,请参阅 http://mvvmcross.wordpress.com/ 中的 N=31


如果您正在查看此关闭区域,那么您可能还需要考虑在应用程序关闭时采取哪些步骤(通过用户或操作系统操作)。 MvvmCross 确实公开了框架中常见的“生命周期监视器”钩子的开始,但实际上这些在目前非常基础 - 所以你可能会发现你需要在这里构建自己的公共层。

【讨论】:

  • 非常感谢@Stuart 的出色回答(以及MVVMCross 本身)。
  • 致@Stuart 和其他感兴趣的人:对于它的价值,请找到一个自定义 WPF 视图演示者类的示例,基本 Close 支持 here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2014-02-21
  • 2021-07-03
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多