2010-11-21 8 views
9

RoutedCommand và RoutedUICommand có rất nhiều thứ cho họ. Có hỗ trợ nướng cho văn bản và cho cử chỉ bàn phím. Bạn có thể liên kết một tập hợp các RoutedUICommands với một ItemsSource của Menu và nó sẽ tự động tạo và ràng buộc các mục menu cho bạn. Một số lệnh (Cắt, Sao chép, Dán) được tự động hỗ trợ bởi các điều khiển ngoài hộp.Bất kỳ khung MVVM nào chơi đẹp với RoutedCommand?

Tuy nhiên, bất cứ khi nào tôi sử dụng MVVM, tôi đã tìm thấy các lệnh được định tuyến kém phù hợp, bởi vì XAML và codebehind lặp đi lặp lại mà tôi phải viết cho từng câu lệnh. Khi tôi đang thực hiện MVVM, tôi thường bị thương bằng cách sử dụng RelayCommand thay vì các lệnh được định tuyến. Đây là một cách giải quyết thích hợp một số thời gian, nhưng nó có nhược điểm - ví dụ, các cử chỉ quan trọng trở thành much more complicated.

Nhưng sau khi xem phiên bản "Build your own MVVM Framework" của Rob Eisenberg, tôi không còn hài lòng với các lệnh chuyển tiếp và những thiếu sót của chúng. Vấn đề duy nhất với các lệnh định tuyến là mã boilerplate lặp đi lặp lại, và một khi bạn nhân tố mã lặp đi lặp lại vào một khung công tác và áp dụng các quy ước, dường như không còn lý do gì để không sử dụng các lệnh được định tuyến trong MVVM.

Về mặt kỹ thuật, có vẻ như điều này sẽ không khó. Khung công tác chỉ cần liên kết với các sự kiện CommandManager.CanExecuteExecuted của chế độ xem và áp dụng các quy ước để tìm phương pháp và thuộc tính trên ViewModel - ví dụ: khi lệnh Cắt được thực hiện, hãy tìm phương thức ExecuteCut (và thuộc tính CanExecuteCut) trên ViewModel. Tôi có thể xây dựng khuôn khổ MVVM của riêng tôi mà làm cho điều này dễ dàng.

Nhưng câu hỏi của tôi là, đã có các khung MVVM hoạt động với RoutedCommand chưa? Khung MVVM duy nhất mà tôi quen thuộc với bất kỳ chiều sâu nào là Caliburn.Micro, và hiện tại nó không hỗ trợ các lệnh được định tuyến theo cách này (điều này khiến tôi ngạc nhiên vì nó hỗ trợ hương vị của bọt hành động).

Trả lời

1

Nếu tôi nhớ chính xác, Sacha Barber đã làm điều gì đó theo hướng đó, tôi nghĩ bạn có thể có một cái nhìn here.

+1

Trang web của nó không nói gì về các sự kiện được định tuyến. Tôi lướt nhanh qua mã nguồn nhưng có vẻ như không có gì liên quan ở đó. –

2

với nhiều marathon nghiên cứu trong SO và các trang web khác, không tìm thấy bất kỳ khung thích hợp nào để CHƠI với RoutedCommand.

nhưng một trong những đối tượng WPF Josh Smith đã triển khai giải pháp tốt đẹp khi sử dụng Lệnh được định tuyến với MVVM.

bạn có thể kiểm tra Using RoutedCommands with a ViewModel in WPF, được nêu rõ là gọn và nhẹ để sử dụng RoutedCommands trong kiến ​​trúc MVVM.