2011-06-17 9 views
5

Trước đây tôi đã sử dụngCó sự khác biệt nào giữa việc thêm CommandBindings vào điều khiển so với sử dụng RegisterClassCommandBinding không?

this.CommandBindings.Add(
    new CommandBinding(ApplicationCommands.Copy, this.cmdCopy_Executed, this.cmdCopy_CanExecute)) 

nơi cmdCopy_Executed là một chức năng không tĩnh, nhưng tôi đã nhìn thấy folks sử dụng

static MyControl() 
    { 
     CommandBinding binding = 
      new CommandBinding(ApplicationCommands.Save, CommandHandler); 
     CommandManager.RegisterClassCommandBinding(typeof(MyControl), binding); 
    } 
private static void CommandHandler(object target, ExecutedRoutedEventArgs e) 
    { 
     MessageBox.Show("Command Handled!"); 
    } 

nơi CommandBinding là tĩnh. Được ưa thích hơn người khác?

Trả lời

6

Loại thứ hai là trình xử lý toàn cục hơn so với trường hợp trước đây là ví dụ.

Ngoài ra, RegisterClassCommandBinding không thể không được đăng ký, vì vậy bạn bị kẹt với nó khi bạn đăng ký. Nói chung, khi sử dụng điều này, tốt nhất là gọi các phương thức ảo trên điều khiển của bạn để hành vi của chúng có thể được thay đổi hoặc thông qua.

Với CommandBindings bạn có thể xóa mọi ràng buộc không còn cần thiết nữa. Điều này cũng có thể được thực hiện bởi người dùng bên ngoài kiểm soát của bạn. Vì vậy, bạn có thể thêm một lệnh ràng buộc được yêu cầu, nhưng ai đó có thể dễ dàng làm element.CommandBindings.Clear().

Vì vậy, có sự khác biệt và mỗi điểm có vị trí của chúng. Nếu bạn muốn nó dễ dàng tùy biến, tôi sẽ đi với cái cũ.