Я создаю приложение WPF с использованием шаблона MVVM (для меня это новые технологии). Я использую пользовательские элементы управления для простых битов многоразовой функциональности, не содержащей бизнес-логики, и шаблона MVVM для создания логики приложения. Предположим, что представление содержит мой пользовательский элемент управления, который запускает события, и я хочу добавить обработчик события к этому событию. Этот обработчик событий должен быть в представлении модели представления, потому что он содержит бизнес-логику. Вопрос заключается в следующем: - представление и модель представления связаны только привязкой; как связать обработчик события с помощью привязки? Возможно ли это (я подозреваю, что нет)? Если нет - как я должен обрабатывать события из элемента управления в модели представления? Может быть, я должен использовать команды или INotifyPropertyChanged?WPF - Обработка событий из пользовательского элемента управления в View Model
ответ
Вообще говоря, это хорошая практика MVVM, чтобы избежать кода в коде, как это было бы, если бы вы использовали события в своих пользовательских элементах управления. Поэтому, когда это возможно, используйте INotifyPropertyChanged
и ICommand
.
С учетом сказанного, в зависимости от вашего проекта и того, насколько прагматичным вы являетесь, иногда имеет смысл использовать код управления.
меня в несколько раз использовали что-то вроде этого:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
Вы могли бы также рассмотреть вопрос о Attached Command Behaviour, больше информации об этом и реализациях найти здесь:
Firing a double click event from a WPF ListView item using MVVM
также принять посмотрите на вопрос How Can I Add a New Command to a Control's Event
Использование ICommand в MVVM с XAML.
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM должны были acronym'd в VVMM: вид, Вид модель, модель, также выглядит лучше :))
- 1. Обработка событий из пользовательского элемента управления, содержащего текстовое поле WPF
- 2. Декларативная обработка событий из пользовательского элемента управления ASP.NET на страницу
- 3. Обработка событий управления wpf в ViewModel
- 4. Создание пользовательского элемента управления WPF
- 5. Команда WPF: параметр из пользовательского элемента управления
- 6. Поднятие пользовательского события из элемента управления WPF
- 7. Добавление пользовательского элемента управления WPF из кода
- 8. Обработка событий для динамически добавленного пользовательского элемента управления
- 9. Динамически загружать WPF View & View Model из DLL
- 10. события пользовательского управления wpf
- 11. Обработка RequiredFieldValidator внутри пользовательского элемента управления
- 12. Передача данных в несколько экземпляров пользовательского элемента управления в WPF
- 13. Создание пользовательского элемента управления в WPF
- 14. Получить данные из пользовательского элемента управления в wpf для пользовательского элемента управления?
- 15. Использование пользовательского элемента управления WPF в WinForms
- 16. WPF Компоновка пользовательского элемента управления в перспективе
- 17. Возврат из пользовательского элемента управления
- 18. Model View ViewModel в WPF с WebBrowser
- 19. Model-View-ViewModel в WPF
- 20. Force МОФ обновления управления от View Model
- 21. Обработка событий в WPF
- 22. WPF дизайн пользовательского элемента управления вопрос
- 23. WPF/XAML: ярлык для пользовательского элемента управления
- 24. Навигация в панели управления WPF изнутри пользовательского элемента управления?
- 25. Поддержание WPF MVVM View Model & Model Relationships
- 26. Привязки внутри пользовательского элемента управления WPF
- 27. Исключение из пользовательского элемента управления в приложении WPF
- 28. WPF: Привязка Свойство из пользовательского элемента управления в ViewModel
- 29. Наследование из пользовательского элемента управления в WPF - члены недоступны
- 30. Изменение из пользовательского элемента управления WPF в окно?
управление должно быть многоразовым, так что код не будет делать - это привязывает управление к определенной модели представления. Команды ... Наверное, нет - они больше подходят для действий пользователя. Затем INotifyPropertyChanged? Спасибо :) – Vitaly
Трудно сказать для меня, не зная больше деталей. Но я добавил некоторые ссылки на соответствующую информацию – ThomasAndersson
@Vitaly, если вы беспокоитесь о привязке View к явной ViewModel, вы можете обернуть ViewModel в интерфейсе. Я бы посмотрел на «Привязанные командные поведения», которые становятся общепринятой практикой. Кроме того, проверьте MVVMLight или Caliburn в качестве основы для помощи в работе MVVM, это значительно облегчит вам жизнь. – Agies