私のアプリケーションにいくつかの一般的なキーボードショートカットを追加したいと思います。現在、すべてのビューXAMLで、私はこのコードを追加します。コードの後ろにコードをバインドするコマンドをバインドする
<Window.InputBindings>
<KeyBinding Command="{Binding ZoomInCommand}" Key="Add" Modifiers="Control" />
<KeyBinding Command="{Binding ZoomOutCommand}" Key="Subtract" Modifiers="Control" />
</Window.InputBindings>
は、私はこれを一般化するため、私は、WPFウィンドウクラスをサブクラス化し、代わりに新しく作成されたサブクラスを使用します。今、私はどのようにこれらのキーボードコマンドを対応するコードにバインドできるのだろうかと思っています。
public class MyWindow : Window
{
public MyWindow()
{
DataContextChanged += OnDataContextChanged;
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
InputBindings.Clear();
var dataContext = DataContext as IZoomableViewModel;
if (dataContext != null)
{
InputBindings.Add(new KeyBinding(dataContext.ZoomInCommand, Key.Add, ModifierKeys.Control));
InputBindings.Add(new KeyBinding(dataContext.ZoomOutCommand, Key.Subtract, ModifierKeys.Control));
}
}
}
をしかし、私は直接のDataContextへのアクセス権を持っているとバインディング()オブジェクトを使用するのではなく、それをキャストする必要があるとして、これは、私には右見ていない:現在、それはこのようになります。 MVVMのように見えるようにコードを変更するにはどうすればよいですか?