Tôi đang xây dựng một ứng dụng WPF sử dụng mẫu MVVM (cả hai đều là công nghệ mới cho tôi). Tôi sử dụng các điều khiển người dùng cho các bit đơn giản của chức năng có thể tái sử dụng không chứa logic nghiệp vụ và mẫu MVVM để tạo logic ứng dụng. Giả sử một khung nhìn chứa điều khiển người dùng của tôi kích hoạt các sự kiện và tôi muốn thêm một trình xử lý sự kiện vào sự kiện đó. Trình xử lý sự kiện đó phải ở trong dạng xem của khung nhìn, bởi vì nó chứa logic nghiệp vụ. Câu hỏi là - xem và mô hình khung nhìn được kết nối chỉ bằng cách ràng buộc; làm thế nào để kết nối một trình xử lý sự kiện bằng cách sử dụng ràng buộc? Thậm chí có thể (tôi nghi ngờ là không)? Nếu không - làm thế nào tôi nên xử lý các sự kiện từ một điều khiển trong mô hình khung nhìn? Có lẽ tôi nên sử dụng lệnh hoặc INotifyPropertyChanged?WPF - Xử lý sự kiện từ điều khiển người dùng trong Chế độ xem
Trả lời
Nói chung, thực hành MVVM tốt để tránh mã ở phía sau, như trường hợp nếu bạn sử dụng các sự kiện trong điều khiển người dùng của mình. Vì vậy, khi có thể, hãy sử dụng INotifyPropertyChanged
và ICommand
.
Với điều đó đã nói, tùy thuộc vào dự án của bạn và bạn thực dụng như thế nào, một số lần nó có ý nghĩa hơn khi sử dụng mã kiểm soát phía sau.
Tôi có một vài dịp sử dụng một cái gì đó như thế này:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
Bạn cũng có thể xem xét Attached Command Behaviour, biết thêm về vấn đề này và triển khai để tìm thấy ở đây:
Firing a double click event from a WPF ListView item using MVVM
Ngoài ra hãy xem câu hỏi How Can I Add a New Command to a Control's Event
Sử dụng ICommand trong MVVM với XAML.
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM nên đã được acronym'd như VVMM: Xem, Xem Model, Model, cũng có vẻ tốt hơn :))
- 1. Điều khiển người dùng được nạp động với Trình xử lý sự kiện - Hủy đăng ký
- 2. Sử dụng điều khiển người dùng ASP.NET ASCX cũ trong chế độ xem MVC Razor
- 3. Xử lý sự kiện của WPF User Control
- 4. Sự khác nhau giữa Chế độ xem và Trình điều khiển chế độ xem là gì?
- 5. WPF - Xử lý sự kiện tùy chỉnh gắn trên tùy chỉnh điều khiển
- 6. Dọn dẹp đúng cách các điều khiển người dùng WPF
- 7. Xử lý sự kiện thoát khỏi WPF
- 8. Sự kiện nạp lửa điều khiển người dùng WPF hai lần
- 9. Tìm điều khiển trong chế độ xem đăng nhập
- 10. WPF MVVM Sử dụng lệnh và xử lý sự kiện
- 11. Nhiều người trong nhiều chế độ xem và bộ điều khiển asp.net mvc
- 12. Cách bật từ một bộ điều khiển chế độ xem sang một bộ điều khiển chế độ xem khác
- 13. Sự kiện chạm được xử lý bởi nhiều chế độ xem
- 14. Đi từ Bộ điều khiển đến Chế độ xem
- 15. Thêm chế độ xem của trình điều khiển chế độ xem con vào chế độ xem phụ của bộ điều khiển chế độ xem cha mẹ
- 16. Cách sử dụng Điều khiển người dùng trong WPF MVVM
- 17. Truy cập giá trị điều khiển người dùng WPF
- 18. Mở rộng điều khiển người dùng trong WPF
- 19. Bộ điều khiển xem đẩy vào chế độ xem giao diện chế độ xem
- 20. Sự kiện WPF ràng buộc từ Xem sang Chế độ xemMô hình?
- 21. Trình điều khiển chế độ xem hiện tại từ AppDelegate?
- 22. Gọi `super` từ trình xử lý sự kiện trên bộ điều khiển Ember
- 23. Cách thêm trình xử lý sự kiện cho các sự kiện từ nút trong C# từ chế độ xem nguồn (aspx)
- 24. Theo dõi ETW từ .net, chế độ người dùng và trình điều khiển
- 25. Sự kiện trong Backbone.js các chế độ xem lồng nhau
- 26. Điều hướng giữa các Chế độ xem trong WPF MVVM
- 27. Hiển thị chế độ xem của bộ điều khiển khác
- 28. Sự kiện khi chế độ xem tìm kiếm mở rộng từ chế độ xem được biểu tượng
- 29. Thao tác điều khiển gọi từ chế độ xem trong Ember
- 30. xử lý các liên kết trong chế độ xem web
kiểm soát nên có thể tái sử dụng, do đó mã sẽ không làm - đó liên kết điều khiển với một mô hình xem cụ thể. Lệnh ... Có thể không - chúng nhiều hơn cho hành động của người dùng. INotifyPropertyChanged rồi? Cảm ơn :) – Vitaly
Khó nói với tôi mà không biết thêm chi tiết cụ thể. Nhưng tôi đã thêm vào một số liên kết đến thông tin liên quan – ThomasAndersson
@Vitaly nếu bạn lo lắng về việc gắn View vào ViewModel rõ ràng, bạn có thể bọc ViewModel trong một giao diện. Tôi sẽ xem xét các Hành vi Lệnh đính kèm mà họ đang trở thành thực hành được chấp nhận. Ngoài ra, hãy xem MVVMLight hoặc Caliburn như một khuôn khổ để hỗ trợ công việc MVVM của bạn, nó sẽ giúp bạn dễ dàng hơn nhiều. – Agies