2013-01-06 24 views
39

Tôi nhầm lẫn về mẫu lệnh. Có rất nhiều giải thích khác nhau về các lệnh. Tôi nghĩ rằng mã dưới đây đã được delegatecommand, nhưng sau khi đọc về relaycommand, tôi nghi ngờ.Sự khác biệt giữa Delegatecommand, relaycommand và routedcommand

Sự khác nhau giữa relaycommand, delegatecommand và routedcommand là gì. Có thể hiển thị trong các ví dụ có liên quan đến mã được đăng của tôi không?

class FindProductCommand : ICommand 
{ 
    ProductViewModel _avm; 

    public FindProductCommand(ProductViewModel avm) 
    { 
     _avm = avm; 
    } 

    public bool CanExecute(object parameter) 
    { 
     return _avm.CanFindProduct(); 
    } 

    public void Execute(object parameter) 
    { 
     _avm.FindProduct(); 
    } 

    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

} 
+0

Bạn đã làm một tìm kiếm google .. nhìn vào ví dụ ở đây thử mã và áp dụng nó vào những gì bạn có .. http://msdn.microsoft.com/en-us/library/ff654132.aspx http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.mvvm.relaycommand.aspx http://msdn.microsoft.com/en-us/library/ system.windows.input.routedcommand.aspx – MethodMan

+1

Vâng, nó không giúp đỡ rất nhiều – Zaz

+0

tôi sẽ đề nghị làm một tìm kiếm google trên mẫu lệnh là trên google thì – MethodMan

Trả lời

43

lớp FindProductCommand bạn cài đặt giao diện ICommand, có nghĩa là nó có thể được sử dụng như một WPF command. Nó không phải là DelegateCommand cũng không phải là RelayCommand, cũng không phải là RoutedCommand, là các triển khai khác của giao diện ICommand.


FindProductCommand vs DelegateCommand/RelayCommand

Nói chung, khi một thực hiện ICommand được đặt tên DelegateCommand hoặc RelayCommand, ý định là bạn không cần phải viết một lớp mà thực hiện giao diện ICommand; thay vào đó, bạn chuyển các phương thức cần thiết làm tham số cho hàm tạo DelegateCommand/RelayCommand.

Ví dụ, thay vì toàn bộ lớp học của bạn, bạn có thể viết:

ProductViewModel _avm; 
var FindPoductCommand = new DelegateCommand<object>(
    (parameter) => _avm.FindProduct(), 
    (parameter) => _avm.CanFindProduct() 
); 

Một số triển khai của DelegateCommand/RelayCommand:

liên quan:


FindProductCommand vs RoutedCommand

FindProductCommand của bạn sẽ thực hiện FindProduct khi được kích hoạt.

WPF được xây dựng trong RoutedCommand làm một cái gì đó khác: nó tăng một routed event có thể được xử lý bởi các đối tượng khác trong cây thị giác. Điều này có nghĩa là bạn có thể đính kèm lệnh ràng buộc với các đối tượng khác để thực thi FindProduct, trong khi đính kèm chính bản thân một hoặc nhiều đối tượng kích hoạt lệnh, ví dụ: RoutedCommand. một nút, một mục menu hoặc một mục menu ngữ cảnh.

Một số câu trả lời liên quan SO:

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