如何在 MVVM WPF 模式中执行关闭、隐藏窗口等命令或启动进程的命令

问题描述 投票:0回答:1

我正在 WPF 平台上使用 MVVM 模式开发应用程序,但我不知道如何使用与 ViewModel 中的视图直接相关的命令,以免破坏该模式。我在尝试制作一个授权窗口时遇到了一个问题,该窗口暗示授权成功后隐藏此窗口,或者例如我需要使用动画,但我不想用XAML代码开发它,所以我编写了C#代码并将其放置在视图代码中,即使它违反了模式。请分享您使用此模式的开发经验

为了解决这个问题,我违反了 MVVM 模式,将只负责视觉效果的代码放在 View 中

wpf mvvm
1个回答
0
投票

制作一个授权窗口,授权成功后隐藏此窗口

这听起来像是您的窗口在接受您的授权时自行关闭的工作,而不是父母的工作。

我需要使用动画,但我不想在XAML代码中开发它,所以我编写了C#代码并将其放置在View代码中,即使它违反了模式

这是视图特定的逻辑,它应该在视图中。我认为这里的问题是您对视图模型是什么的理解,这是一个可测试的工作单元,它使您的视图通过属性/命令绑定发挥作用。动画、一些非常特定于视图的弹出窗口(例如填充文本框的浏览对话框),这些都是特定于视图的代码,而不是视图模型代码。

两者之间仍然存在很多灰色区域,您可以强制将标题中提到的许多内容添加到虚拟机中:

  • 隐藏窗口:将窗口的
    IsVisible
    绑定到 VM 属性,然后在要删除窗口时将该属性设置为 false。或者在窗口中监听属性更改本身(
    this.WhenAnyValue
    等)并通过关闭窗口对其做出反应。
  • 启动进程的命令:我假设您的意思是从命令启动进程?在这种情况下,我会将实际的流程启动逻辑提取到 DI 服务,然后从命令中调用相关的服务函数。但是,如果您的意思是在 VM 属性更改时启动进程,答案如下:
    this.WhenAnyValue
    (或同等内容)。
© www.soinside.com 2019 - 2024. All rights reserved.