2

私はアプリ(WPF MVVM)を書いています。ユーザーがチェックボックスをチェック/チェック解除しようとするたびにプロンプ​​トを表示する必要があります(他のコントロールですが、この投稿ではチェックボックスに焦点を当てます)。チェックボックスで開始されたアクションを続行するかどうかを MessageBox 経由で確認する必要があります。PreviewMouseLeftButtonDown イベントに MessageBox の質問が既にありますが、今誰かが私に言った:キーボードを使用してチェック/チェック解除するとどうなりますか?

PreviewMouseLeftButtonDown イベント用に既に持っているコードにフックできるアナログ キーボード イベントがあるので、チェックボックスをオン/オフにするたびにプロンプ​​トが表示されますか?

4

2 に答える 2

3

MVVM を使用していることを考えると、ViewModel (VM) クラスでこれを処理することをお勧めします。

  • CheckBox コントロールの IsChecked プロパティを VM のプロパティにバインドします。

  • VM で、チェックされた値を検証するためのロジックをセットアップします。VM からメッセージ ボックスを直接開く必要はありません (これにより、VM がビジュアル サービスに直接結び付けられます)。クエリ サービスを (C# インターフェイスとして) 作成し、MessageBox を表示するコードで実装することをお勧めします。サービスを VM のコンストラクターに渡すか、コンテナー (依存関係の挿入またはグローバル サービス コンテナー) を介して VM にサービスを取得させます。

  • クエリが失敗した場合は、VM の値を変更しないでください。ビューの CheckBox は以前の状態を維持します。

于 2012-06-07T15:57:29.107 に答える
1

コントロールにはPreviewKeyDown/KeyUpイベントがあり、これをアタッチしICommandたり(MVVMスタイルの場合)、コードビハインドイベントをワイヤアップしたりできます(MVVM以外の場合)。

その後、イベントはメッセージボックスを表示でき、必要に応じて、以下を使用して操作をキャンセルできます。

if(e.Key == Key.Space)
{
    //TODO: processing for message box
    e.Handled = True
}

上記は、イベントチェーンを処理済みとしてマークするため、パイプライン内のそれ以上のイベントは実行されません。

Key.Spaceすべてをキャプチャしたい場合は、キャプチャしたいものに置き換えたり、削除したりできることに注意してください。

于 2012-06-07T18:34:06.483 に答える