gpt4 book ai didi

wpf - 是否存在 ViewModel 需要在 View w.r.t 上调用方法的场景? WPF中的MVVM?

转载 作者:行者123 更新时间:2023-12-03 10:18:53 33 4
gpt4 key购买 nike

根据该模式,ViewModel 公开 View 绑定(bind)到的属性(带有更改通知)和命令(通知 VM 用户操作)。
从 VM 流向 View 的唯一通信是属性更改通知(以便 View 可以使用更新的数据刷新自身)。

在模式的 MVP 或 PresentationModel 形式中(如果我没记错的话),View 实现了一个普通的 vanilla 接口(interface)(由方法、属性和/或事件组成)。使用 MVVM,感觉 IView 上的方法已被禁止(连同 IView 本身)。

我能想到的一种情况是将焦点设置到 View 中的某个控件。 (当用户执行 ActionX 时,应立即将焦点设置为 FieldY)。

  • 在 MVP 中,我将其写为 IView.ActivateField(NameConstant),演示者或 PM 将调用它。
  • 在 MVVM 中,这似乎是一个边缘案例,需要一种解决方法/一点代码隐藏。 VM 实现了一个 ActiveField 属性,它设置为 NameConstant。 View 获取更改通知事件并在代码隐藏事件处理程序中激活 Name 控件。

  • 以上只是规范的异常(exception)吗?或者还有其他这样的场景,VM 需要调用 View 上的方法?

    最佳答案

    虽然不鼓励 ViewModel 调用 View 上的实际方法,但在某些情况下能够调用 View 操作是有益的。大多数 MVVM 实践者提倡使用 mediator pattern 的消息传递系统。处理 VM 以查看通信,如果您查看 MVVM 框架,例如 MvvmFoundation ,你经常可以看到这样的信使系统在工作的例子。

    就我自己而言,我发现需要执行此操作的最常见情况是使用焦点操作,因为通常使用 XAML 将焦点设置在正确的元素上可能会很麻烦,并且能够执行类似的简单操作。 ..

    Messenger.Notify("SetFocusOnElement");

    可以派上用场。

    关于wpf - 是否存在 ViewModel 需要在 View w.r.t 上调用方法的场景? WPF中的MVVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2565351/

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