我目前正在将一个小的WPF项目转换为MVVM。在我的ItemsControl绑定的主窗口的ViewModel中有一个List<CustomObject>
,并使用DataTemplate构建每个元素的UI。我的旧代码在DataTemplate中使用了一个事件处理程序来处理点击事件。我想使用某种命令绑定来消除我的代码隐藏事件处理程序,但是我的ItemsControl中的项目的DataContext是模型对象,所以我目前无法绑定到ViewModel中的ICommand。WPF MVVM - 命令绑定在一个ItemsControl内
因此,我想有几种方法可以解决这个问题,我不确定哪个是最“MVVM”的方式。我是否将ItemsControl.ItemsSource绑定到代表每个项目的新ViewModel类的集合?或者我使用UserControl而不是DataTemplate,然后我可以将每个UserControl绑定到它自己的ViewModel实例上来表示它?或者是否有某种绑定表达式可以用来引用窗口的DataContext以访问绑定到ViewModel(因为我键入这个,它听起来很糟糕,所以我假设一个大的“否”理念)?
此外,我想要绑定我的命令是网格控件的LeftMouseButtonUp事件。 Grid没有“命令”,所以我试图使用InputBindings。我可以使用静态命令(比如内置的ApplicationCommand之一),但我不能使用绑定表达式绑定到ViewModel属性的ICommand实例,因为MouseBinding.Command不是DependencyProperty。
对于MVVM中事件处理的主题我感到很困惑,所以任何和所有的信息都是值得赞赏的。