我正在 WPF 平台上使用 MVVM 模式开发应用程序,但我不知道如何使用与 ViewModel 中的视图直接相关的命令,以免破坏该模式。我在尝试制作一个授权窗口时遇到了一个问题,该窗口暗示授权成功后隐藏此窗口,或者例如我需要使用动画,但我不想用XAML代码开发它,所以我编写了C#代码并将其放置在视图代码中,即使它违反了模式。请分享您使用此模式的开发经验
为了解决这个问题,我违反了 MVVM 模式,将只负责视觉效果的代码放在 View 中
制作一个授权窗口,授权成功后隐藏此窗口
这听起来像是您的窗口在接受您的授权时自行关闭的工作,而不是父母的工作。
我需要使用动画,但我不想在XAML代码中开发它,所以我编写了C#代码并将其放置在View代码中,即使它违反了模式
这是视图特定的逻辑,它应该在视图中。我认为这里的问题是您对视图模型是什么的理解,这是一个可测试的工作单元,它使您的视图通过属性/命令绑定发挥作用。动画、一些非常特定于视图的弹出窗口(例如填充文本框的浏览对话框),这些都是特定于视图的代码,而不是视图模型代码。
两者之间仍然存在很多灰色区域,您可以强制将标题中提到的许多内容添加到虚拟机中:
IsVisible
绑定到 VM 属性,然后在要删除窗口时将该属性设置为 false。或者在窗口中监听属性更改本身(this.WhenAnyValue
等)并通过关闭窗口对其做出反应。this.WhenAnyValue
(或同等内容)。