XamDataGrid では、既定の動作として
Ctrlキーを押しながらクリックすることで、選択済みの行を解除する(非選択状態に戻す)ことが可能です。

しかし、単一選択を前提とするアプリケーションや、ユーザーに選択解除を許可したくないケースでは、Ctrlキーによる選択解除を抑制 したい場合があります。

本記事では、SelectedItemsChanging イベントを利用して
Ctrlキー押下時に選択解除を無効化する実装方法をご紹介します。

⚙️ 実装手順

  1. XamDataGrid SelectedItemsChanging イベントをハンドルする
  2. Ctrlキーが押下されており、かつ選択対象が 0 件になる場合にイベントをキャンセルする

これにより、Ctrlキーを押しながら既に選択されている行をクリックしても、選択解除されなくなります。

🧠 コード例

private void xamDataGrid_SelectedItemsChanging(
    object sender, 
    Infragistics.Windows.DataPresenter.Events.SelectedItemsChangingEventArgs e)
{
    // Ctrl キーが押されている場合
    if (Keyboard.Modifiers == ModifierKeys.Control)
    {
        // 新しい選択状態に含まれるレコードが 0 件(=すべて解除)の場合
        if (e.NewSelection.Records.Count == 0)
        {
            // イベントをキャンセル(選択解除を防ぐ)
            e.Cancel = true;
        }
    }
}

🔍 実装のポイント

  • SelectedItemsChanging イベントは、選択状態が変更される直前に発生します。
  • e.NewSelection.Records プロパティには、新しい選択状態のレコード一覧が含まれます。
    • 選択が解除されると、この Count は 0 になります。
  • 単一選択モードの場合、e.NewSelection.Records.Count は常に 0 または 1 となるため、Ctrlキー押下中に「0件(=選択解除)」となるケースを検出してキャンセルする仕組みです。

✅ 動作確認

  • Ctrlキーを押したまま選択済みの行をクリック → 選択解除されない(キャンセルされる)
  • Ctrlキーを押したまま未選択の行をクリック → 通常通り選択される

このように、選択解除だけを抑制し、選択の追加や切り替え動作には影響を与えません。

📎 関連ナレッジベース

本サンプルは、以下の記事のサンプルをベースに追加実装したものです:
XamDataGrid – アクティブ行と選択行について

また、単一選択に関する基本的な設定方法は以下の記事もあわせてご参照ください:
XamDataGrid – 行の選択を単一選択にしたい

Tagged:

製品について

Ultimate UI for WPF