代码之家  ›  专栏  ›  技术社区  ›  Pooran

在codebehind上具有UI特定事件的MVVM

  •  0
  • Pooran  · 技术社区  · 14 年前

    我有一个Silverlight页面,它几乎没有控件,而且所有的行为都不是数据绑定的。例如,RichTextBox是Text属性的数据绑定。但是粗体、斜体、编号等控件行为是由控件上方工具栏中的按钮单击事件驱动的。这些控件确实更改数据的值,但实际上并不保存/检索数据。所以,在Silverlight页面的代码隐藏页中保留这样的UI事件,而不是在ViewModel中创建ICommand对象,可以吗?

    MVVM说视图应该与ViewModel交互,以便在内部与模型交互。在这里,视图只是更新视图,而不是模型。那么,这些事件的代码隐藏是否正常?

    1 回复  |  直到 14 年前
        1
  •  1
  •   AndrewS    14 年前

    这类事情可能非常主观,但请记住ViewModel是视图的模型,包括如何显示视图的设置。我让按钮等连接到视图模型中的icommand(例如google中的'DelegateCommand'或'RelayCommand',而不是视图中的命令。然后,我的ViewModel会根据需要更新其状态,并且视图会响应事件。按钮单击在ViewModel中循环,即使VM除了激发视图要响应的事件(以及处理事件的异常和日志记录等)之外什么都不做。

    对于视图中的复杂行为,如果不影响它所处理的数据,那么处理代码中的事件当然是合适的,尽管我通常发现这是用户控件中的情况,而不是windows等。