gpt4 book ai didi

wpf - 正确使用命令 (MVVM)

转载 作者:行者123 更新时间:2023-12-03 10:28:44 25 4
gpt4 key购买 nike

问题。我想从我的 View 中调用 ViewModel-Command。我遇到的问题是:无法绑定(bind) Command 参数。比方说。用户单击项目。我想将一个包含以下属性的对象传递给我的 ViewModel 命令:CurrentEntity、PositionX、PositionY。 (这是一个面向图形的应用程序。这就是我将 X、Y 位置传递给我的 View 模型的原因。我必须将值存储在 DB 中。)
现在你将如何解决这个问题?你如何绑定(bind) View 中的命令并传递这个特定的命令参数对象?

我现在所做的:我有一个特殊的接口(interface),它是由 VM 实现的命令定义。那么......在我看来(代码隐藏)我将 DataContext 转换为这个命令接口(interface),然后我从代码后面(事件处理程序)调用命令。但这并没有真正的意义......因为在那种情况下我可以调用一个简单的 ViewModel 函数。 (如果我不需要 CanExecute 功能)
这是一个好的设计吗?我不喜欢的是......一些命令绑定(bind)在 XAML 中,一些在代码隐藏中。从架构的角度来看,这有点令人困惑。

我够清楚吗?

谢谢

最佳答案

最重要的是 ViewModel 不包含任何特定于 View 的代码。 View 可以做任何它需要做的事情,以便与底层的 ViewModel 一起工作。

使用命令将您的 View 绑定(bind)到您的 ViewModel 很方便,因为它使 XAML 代码简单、易读且可测试;但是,如果您有一个复杂的使用场景,需要一些代码隐藏来将 View 的数据“转换”为 ViewModel 可以使用的东西(在这种情况下:坐标和 CurrentEntity),那么使用事件处理程序是完全可以接受的,并且手动执行 Command 绑定(bind)(如果您愿意,甚至可以在 VM 上使用公共(public)方法)。

这个想法是确保您的代码是可单元测试的:根据您的描述,我认为您是完全安全的。

如果你想让你的代码只使用命令就严格符合“MVVM”模型,那么你可以使用自定义行为或EventTriggers。以“弥合”您的 View 和 ViewModel 的 Command 绑定(bind)之间的差距。

关于wpf - 正确使用命令 (MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com