2009-05-14 30 views

Trả lời

49

Lệnh chuyển tiếp không tồn tại trong WPF, nó chỉ là một lớp bên ngoài được nâng lên nổi bật sau khi được xác định trong this MSDN article. Bạn cần tự viết nó nếu bạn muốn sử dụng nó.

Nếu không, bạn có thể cho bạn lệnh Đại biểu từ bộ công cụ WPF here có một chút chức năng bổ sung trên mã RelayCommand.


Ah, câu hỏi đã thay đổi khi tôi nhập câu trả lời này. Giả sử rằng bạn đang sử dụng RelayCommand như được định nghĩa ở trên, bạn cần cung cấp nó với một hoặc hai đại biểu, một hàm trả về một bool để xác định xem lệnh có đang ở trạng thái hợp lệ hay không, và thứ hai không trả về gì và thực sự chạy chỉ huy. Nếu bạn không cung cấp ủy nhiệm "CanRun" thì lệnh sẽ xem xét rằng nó luôn ở trạng thái hợp lệ. Mã được sử dụng trong bài viết:

RelayCommand _saveCommand; 
public ICommand SaveCommand 
{ 
    get 
    { 
     if (_saveCommand == null) 
     { 
      _saveCommand = new RelayCommand(param => this.Save(), 
       param => this.CanSave); 
     } 
     return _saveCommand; 
    } 
} 

Khai báo một RelayCommand sẽ gọi phương thức Save() khi kích hoạt và trả lại thuộc tính CanSave làm kiểm tra tính hợp lệ. Khi lệnh này bị ràng buộc với một nút trong WPF, thuộc tính IsEnabled của Button sẽ khớp với thuộc tính CanSave của ViewModel và khi nút được bấm (giả sử nó được kích hoạt), phương thức Save() sẽ được gọi trên ViewModel.

+1

Tôi đã có một lợi thế vì tôi đã tìm kiếm nó hôm qua cho câu trả lời này: http://stackoverflow.com/questions/858268/in-mvvm-what-is-the-best-way- for-the-viewmodel-to-respond-to-user-actions-in-the/858303 # 858303 –

+3

Tôi muốn các mẫu mã bài viết của MSDN không phải tất cả đều lộn xộn với nhau, giống như vậy trong nhiều tháng nay, bất cứ ai biết một tấm gương hoặc một cái gì đó cho thấy chúng bình thường? –

+0

Không chính xác/lỗi thời Lệnh chuyển tiếp không tồn tại, nhưng một phần của https://mvvmlight.codeplex.com/ toolkit – MikeT

7

Để thay thế cho việc tạo các trình bao bọc RelayCommand cho tất cả các phương pháp của bạn, tôi có thể đề xuất một thư viện và nguồn miễn phí cho phép bạn sử dụng liên kết {BindTo Save()}. Tôi tạo ra nó để đơn giản hóa các ràng buộc của tôi. Nó cũng làm cho ràng buộc tương đối dễ dàng hơn nhiều. Bạn có thể tìm thấy nó ở đây: http://www.simplygoodcode.com/2012/08/simpler-wpf-binding.html

+2

Trông rất đẹp, mặc dù không kiểm tra nó. Nhưng tôi khuyên bạn nên cải thiện bài đăng trên blog và giải thích chi tiết triển khai. Mặc dù gửi mã cho Github sẽ rất hay. Và cũng xem xét việc đặt nhiều hơn (một số!) Mã trên câu trả lời này trên StackOverflow. –

+0

+1 cho đề xuất của @ MD.Unicorn để đăng mã trên GitHub (hoặc tương tự). Nó cũng có thể được tốt đẹp nếu thư viện đã có sẵn như là một gói NuGet. –

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