2017-12-07 53 views
0

WPFアプリケーションでDataGridを使用していて、行が完全に選択されていない場合にのみ、SelectedCellsChangedイベントで関数を実行します。ユーザーが行のヘッダーをクリックすると発生します。WPF DataGrid - 完全な行が選択されているかどうかを検出する方法

テーブルには1つの列しかありません。

次のコードを試しましたが、常にrowContainer.IsSelectedという値はfalseです。

どうすればいいですか?あなたが行うことができます

Private Sub DataGridEx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles Me.SelectionChanged 

    If SelectedCells.Count <> 1 Then 
     Exit Sub 
    End If 

    If Not SelectedCells.First.Item.ToString.Contains("NewItemPlaceholder") Then 

      Me.TheDispatcher.BeginInvoke(
       Sub() 
        Dim cell = SelectedCells.First 
        Dim index = Items.IndexOf(cell.Item) + 1 
        Dim rowContainer As DataGridRow = ItemContainerGenerator.ContainerFromIndex(index) 

        If rowContainer IsNot Nothing Then 
         If Not rowContainer.IsSelected Then 
          ' run a function here 
         End If 
        End If 
       End Sub, 
       DispatcherPriority.Input) 

    End If 

End Sub 

答えて

1

取得選択セルの行のコンテナとそのIsSelectedプロパティを確認します

private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
{ 
    DataGrid dg = sender as DataGrid; 
    if (dg.SelectedCells != null && dg.SelectedCells.Count > 0) 
    { 
     var cell = dg.SelectedCells[0]; 
     var row = dg.ItemContainerGenerator.ContainerFromItem(cell.Item) as DataGridRow; 
     if (row != null && row.IsSelected) 
     { 
      MessageBox.Show("row is selected..."); 
     } 
    } 
} 

あなたがCellOrRowHeaderSelectionUnitを使用している場合、これは動作するはずです。

0

ことの一つは、XAMLでFullRow、セルまたはCellOrRowHeader

dim dg = new DataGrid(); 
dg.SelectionUnit == System.Windows.Controls.DataGridSelectionUnit.FullRow; 
dg.SelectionUnit == System.Windows.Controls.DataGridSelectionUnit.CellOrRowHeader; 
dg.SelectionUnit == System.Windows.Controls.DataGridSelectionUnit.Cell; 

としてSelectionUnitにあなたのデータグリッドを強制され、あなただけ次に

<DataGrid SelectionUnit="FullRow" ... > 

プロパティ設定を適用しますSelectedCellsChangedメソッドまたはSelectionChangedメソッドにフックして、そのメソッドに作用させることができます。

次に、1行または2行だけの部分行の選択について心配する必要はなく、処理しようとしている行全体をトリガーする必要はありません。完全な行を強制することにより、コレクションには1行につき1つのエントリがあります。あなたは、細胞によってそれを持って、広い5列があり、人が二列に3つのセルを選択した場合はそれ以外の場合、それは行をカバーする個々のセルに同じ行を表す6個の細胞を持っています。..

HTH

関連する問題