【问题标题】:Correct usage of Commands (MVVM)正确使用命令 (MVVM)
【发布时间】:2013-12-24 16:43:43
【问题描述】:

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

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

我够清楚了吗?

谢谢

【问题讨论】:

    标签: wpf xaml mvvm


    【解决方案1】:

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

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

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

    如果您希望仅使用命令使您的代码严格符合“MVVM”模型,那么您可以使用自定义行为或EventTriggers 来“弥合”您的视图和视图模型的命令绑定之间的差距。

    【讨论】:

    • 谢谢!我想听到的答案:)
    猜你喜欢
    • 2015-04-14
    • 2017-12-06
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2021-05-05
    • 2013-11-22
    相关资源
    最近更新 更多