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