1

アプリケーションを実行し、データグリッドにデータを入力します。次に、いくつかの行をクリックして、次の方法でイベントを処理します。

  private void dataGridCanTabParamList_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        var buffer = sender as DataGrid;

        if ((buffer == null) || (buffer.CurrentColumn == null) )
            return;

        SetCanPropertyDesription(buffer.CurrentColumn.Header.ToString());

    }

CurrentColumnがnullのときにこのイベントを最初に実行したとき、このイベントを2回実行したときに、まったく同じ位置でCurrentColumnにデータが含まれています。CurrentItemは、最初にクリックしたときにも空です。

最初のクリックでデータが表示されないのはなぜですか?

4

2 に答える 2

4

PreviewMouseDownEvent実際のイベントの前に発生するトンネリングイベントMouseDownです。

またMouseDown event(handled by DataGridCell)、dataGridの列の選択を担当します。したがって、最初はセルが選択されていないため、その時点ではnullになりますCurrentItemCurrentColumn

それがどのように機能するかというイベントの伝播を参照してください-

ここに画像の説明を入力してください

于 2012-11-15T14:03:54.887 に答える
1

これは、CurrentColumnとCurrentItemが選択した列/アイテムを参照しているためです。最初にクリックすると、トンネリングされたイベントを処理するときに何も選択されません(したがって、DataGridが実際に現在のアイテムを設定する前にコードが実行されます)。2回目にクリックすると、CurrentColumnとCurrentItemはすでに設定されています。

于 2012-11-15T13:48:49.780 に答える