我目前正在將一個小的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中事件處理的主題我感到很困惑,所以任何和所有的信息都是值得讚賞的。