2010-11-15 35 views
10

Tôi có ứng dụng WPF theo mẫu MVVM. Tôi cần triển khai phím tắt. Các phím tắt phải contol hành vi kiểm soát WebBrowser. Tôi đã xác định lệnh tùy chỉnh đầu tiên và thêm vào inputbindings của khung nhìn. Sẽ có nhiều hơn nữa các lệnh và họ sẽ phải gọi các kịch bản trên trình duyệt:Phím tắt trong WPF MVVM?

MainWindow.xaml.cs:

 ... 

     CommandBinding cb = new CommandBinding(RemoteControlCommands.TestCommand, MyCommandExecuted, MyCommandCanExecute); 
     this.CommandBindings.Add(cb); 

     KeyGesture kg = new KeyGesture(Key.Q, ModifierKeys.Control); 
     InputBinding ib = new InputBinding(RemoteControlCommands.TestCommand, kg); 
     this.InputBindings.Add(ib); 
    } 

    private void MyCommandExecuted(object sender, ExecutedRoutedEventArgs e) 
    { 
     webBrowser.InvokeScript("foo", "Hello World!"); 
    } 

    private void MyCommandCanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

Câu hỏi của tôi là làm thế nào để phù hợp với điều này vào MVVM patern? MVVM là một khái niệm mới đối với tôi nhưng tôi hiểu cách kết buộc lệnh của khung nhìn để xem mô hình và thực hiện các phương thức hoặc thay đổi các thuộc tính. Tuy nhiên, những gì tôi cần trong trường hợp này là thực hiện một phương thức trên một điều khiển trong khung nhìn. Vị trí tốt nhất để xử lý phím tắt trong trường hợp này là gì?

Trả lời

38
<Window.InputBindings> 
    <KeyBinding Command="{Binding MyCommand, Source=viewModel...}" 
       CommandParameter="{Binding,ElementName=browserControl,Mode=Self}" 
       Gesture="CTRL+R" /> 
</Window.InputBindings> 

Bạn có thể ràng buộc thuộc tính lệnh để xem lệnh của Model.

+0

và sau đó? xem mô hình không biết về kiểm soát webbrowser theo quan điểm mà tôi muốn gọi phương thức trên – jlp

+0

Bạn có thể ràng buộc tham số lệnh với một số giá trị như webbrowser chính nó và lấy nó trong phương thức ủy nhiệm của bạn. –

+1

+1, xây dựng ngôn ngữ rất đẹp, havent đã gặp trước –