0

MainWindow に複数のビューを持つグリッドが含まれている MVVM アプリケーションがあります。

ビューモデルの 1 つに、対応するビューでホット キーを使用してアクティブにできるコマンドがあります。特定のビューを含む MainWindow の一部に配置されている場合にのみ、コマンドをアクティブにすることができます。

特定のビューでコマンドを有効にしたいだけの場合、次のコードは正常に機能します。

ComponentView.xaml:

    ...
    <UserControl.InputBindings>
        <KeyBinding Gesture="CTRL+U" Command="{Binding Path=UploadCmd}"/>
    </UserControl.InputBindings>
</UserControl>


MainWindow の任意の部分からホット キーを使用してコマンドをアクティブにできるようにしたいと考えています。

これは、コマンドをどこからでもアクティブにできるように、MainWindow でキーバインドを実行しようとして失敗したものです。

MainWindow.xaml:

<Window x:Class="MyProgram.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:view="clr-namespace:MyProgram.View"
        xmlns:vm="clr-namespace:MyProgram.ViewModel"
        ...>
    <Grid>
        // Grid content
    </Grid>
    <Window.DataContext>
        <vm:ComponentViewModel>
            <KeyBinding Gesture="CTRL+U" Command="{Binding Path=UploadCmd}"/>
        </vm:ComponentViewModel>
    </Window.DataContext>
</Window>

コマンドが xaml のどこに直接あるかをアプリケーションに知らせることはできますか?

4

1 に答える 1

0

私が考えることができる3つのオプション:

  1. コマンドをメイン ウィンドウに配置し、子ビューからメイン ウィンドウのコマンドへの相対ソース バインディングを使用できます。

    {Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type Window}}}

  2. mvvm フレームワークを使用している場合、多くの場合、ビューモデル間でメッセージを送信/通信する方法があります。これは通常、最善の解決策ではありませんが、適切な状況では使用できます。

  3. IOC / 依存性注入を使用して、viewmodellocator でシングルトンとしてインスタンス化されるサービスを作成します。次に、このサービスの実装を親と子のビューモデル コンストラクターに挿入します。次に、子ビューモデルからアクセスできる親ビューモデルから、そのサービスから関数/プロパティを呼び出すことができます。私はこれをナビゲーション目的で使用します。

これらのコマンドで何をしようとしていますか?

お役に立てれば

于 2013-05-09T16:16:00.893 に答える