WPF MVVM - Связывание команд внутри ItemsControl
В настоящее время я конвертирую небольшой проект WPF в MVVM. у меня естьList<CustomObject>
в ViewModel главного окна, к которому привязывается мой ItemsControl, и использует DataTemplate для построения пользовательского интерфейса каждого элемента. Мой старый код использовал обработчик событий внутри DataTemplate для обработки события щелчка. Я хочу использовать какое-то связывание команд для устранения моих обработчиков событий с выделенным кодом, но DataContext элементов в моем ItemsControl является объектом модели, поэтому я не могу в настоящее время связываться с ICommand из ViewModel.
Таким образом, я полагаю, что есть несколько способов атаковать это, и я не уверен, какой из них будет наиболее "MVVM". способ сделать это. Связывать ли ItemsControl.ItemsSource с коллекцией нового класса ViewModel, который представляет каждый элемент? Или я использую UserControls вместо DataTemplate, и затем я могу привязать каждый UserControl к собственному экземпляру ViewModel, который его представляет? Или есть какое-то выражение для привязки, которое я могу использовать для ссылки на DataContext окна, чтобы иметь доступ к привязке к ViewModel (когда я набираю это, это просто звучит плохо, поэтому я предполагаю, что большое "NO" эта идея)?
Кроме того, я хочу связать свою команду с событием LeftMouseButtonUp элемента управления Grid. Там нет "Команды" для сетки, поэтому я пытался использовать InputBindings. Я мог бы использовать статическую команду (например, одну из встроенных ApplicationCommands), но я не мог использовать выражение привязки для привязки к экземпляру ICommand, который является свойством ViewModel, потому что MouseBinding.Command не является DependencyProperty.
Я довольно запутался в вопросе обработки событий в MVVM, поэтому любая информация ценится.