【发布时间】:2010-11-06 06:54:47
【问题描述】:
我目前正在将一个小型 WPF 项目转换为 MVVM。我的 ItemsControl 绑定到的主窗口的 ViewModel 中有一个List<CustomObject>,并使用 DataTemplate 来构建每个元素的 UI。我的旧代码使用 DataTemplate 中的事件处理程序来处理单击事件。我想使用某种命令绑定来消除我的代码隐藏事件处理程序,但我的 ItemsControl 中项目的 DataContext 是模型对象,因此我目前无法从 ViewModel 绑定到 ICommand。
所以,我想有几种方法可以解决这个问题,我不确定哪种方法是最“MVVM”的方法。我是否将 ItemsControl.ItemsSource 绑定到代表每个项目的新 ViewModel 类的集合?或者我是否使用 UserControls 而不是 DataTemplate,然后我可以将每个 UserControl 绑定到它自己的代表它的 ViewModel 实例?或者是否有某种绑定表达式我可以用来引用窗口的 DataContext 以访问绑定到 ViewModel(当我输入这个时,它听起来很糟糕,所以我假设一个很大的“NO”想法)?
另外,我想将我的命令绑定到 Grid 控件的 LeftMouseButtonUp 事件。网格没有“命令”,所以我试图使用 InputBindings。我可以使用静态命令(例如内置的 ApplicationCommands 之一),但我不能使用绑定表达式绑定到作为 ViewModel 属性的 ICommand 实例,因为 MouseBinding.Command 不是 DependencyProperty。
我对 MVVM 中的事件处理主题感到很困惑,因此感谢所有信息。
【问题讨论】: