2010-08-24 46 views
8

Tôi mới trong MVVM. Tôi chỉ học mô hình này và muốn sử dụng nó trong dự án của tôi. Tôi đã hiểu nguyên tắc làm việc của mẫu này và đã học cách sử dụng các Lệnh. Nhưng tôi có câu hỏi làm thế nào để xử lý các sự kiện của một điều khiển khác ví dụ ListBox SelectionChanged sự kiện. ListBox không có thuộc tính CommandCách xử lý sự kiện trong MVVM

+1

Tôi chưa sử dụng, nhưng bạn có thể sử dụng CollectionView hoặc CollectionViewSource để bật MVVM trên các loại điều khiển loại bộ sưu tập khác nhau. –

Trả lời

14

Bạn thường không cần. Ví dụ, bạn chỉ có thể ràng buộc ListBox 's SelectedItem tài sản cho một tài sản trên mô hình quan điểm của bạn:

<ListBox ItemsSource="{Binding Customers}" SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"/> 

Điều này không chỉ cung cấp cho bạn truy cập vào các khách hàng lựa chọn trong mô hình quan điểm của bạn, nó cũng cho phép mô hình điểm của bạn để quyết định khách hàng đã chọn bằng cách đặt chính thuộc tính.

Còn có các kỹ thuật khác để "tránh" xử lý sự kiện trực tiếp trong mã của bạn. Ví dụ, hành vi đính kèm. Tuy nhiên, bạn không nên sợ xử lý sự kiện trực tiếp nếu mã chỉ quan tâm đến chế độ xem và làm cho mã của bạn đơn giản hơn.

+0

Ý tưởng thú vị. Ví dụ tôi muốn xử lý sự kiện Mouse RightClick trên DataGrid. Trong trường hợp này tôi có phải viết xử lý ở mã phía sau hoặc phải sử dụng bahavior đính kèm? – Polaris

+1

@ Polaris. nhìn vào khung mvvm (cinch, mvvm light ...) ở ngoài kia. bạn sẽ tìm thấy các triển khai như EventToCommand Behavior, nơi bạn có thể ràng buộc các sự kiện với các lệnh. và như kent đã nói: cảm thấy tự do khi bạn sử dụng codebehing khi mã hóa xem các công cụ liên quan :) ví dụ BringToView mục đã chọn trong một lưới hoặc hộp danh sách – blindmeis

+0

+1 cho nhận xét về xử lý sự kiện khi chúng chỉ ảnh hưởng đến lớp xem. Vì vậy, nhiều người quên điều này ... –

0

Để thêm thuộc tính lệnh vào điều khiển của bạn, thuộc tính này phải được kế thừa từ ICommandSource. Kiểm tra this bài đăng để xem cách bài đăng được thực hiện.

0

Các BookLibraray áp dụng các WPF Application Framework (WAF) cho thấy làm thế nào để lắng nghe WPF sự kiện trong một Model-View-ViewModel (MVVM) được thiết kế ứng dụng. Nó cho phép người dùng chọn nhiều sách để anh có thể xóa tất cả chúng cùng một lúc. Xem lớp BookLibrary.Presentation.Views.BookView.

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