2010-05-28 36 views
13

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

11

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 INotifyPropertyChangedICommand.

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

+0

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

+0

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

+0

@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

Các vấn đề liên quan