2016-12-28 8 views
0

DataGridにはDataGridTemplateColumnsがあります。
一部の列には単純なTextBlockが含まれていますが、他の列にはComboBoxが使用されています。WPF:別のセルが選択されたときにデータグリッドのセルを更新します。

ユーザーがComboBoxでセルをクリックすると、同じ行のTextBlockをクリックされたComboBoxの現在の値で更新する必要があります。
これは、コンボボックスの値が変更されたとき(コンボボックスにバインドされたプロパティはコンボボックスの値が変更されたときに、そのプロパティがテックスブロックにバインドされたプロパティを更新する)には簡単に実行できますが、コンボボックスのセル単に選択されるだけである。
データグリッドのSelectionUnitはCellOrRowHeaderです。

私は、SelectedCellsChangedEventハンドラなどからDataGrid.CurrentCellから値を抽出しようとしていますが、成功していません。
DataGridセルが選択されているときに、現在の値を取得するのがなぜ難しいのですか?
何か指摘していただければ幸いです。

+1

あなたはDataGridCell.GotFocusイベントを処理しようとしたことがありますか?セルをクリックするとフォーカスが得られます。 – bamanow

+0

他のセルの値は、コンボボックスで選択した値とどのように異なっていますか?それは計算されたものなのでしょうか? –

+0

@bamamanow:GotFocusイベントハンドラは、DataGrid.CurrentCellプロパティと同じ情報を持ちます。 Ed Plunkett:データグリッドには複数のコンボボックス列があります。テキストブロックセルは、コンボボックス列のセルのいずれかの値で更新できます。問題は、コンボボックス選択時の値が変更されたときではなく、コンボボックスセルが選択されたときにテキストブロックを更新することです。 – Number8

答えて

0

あなたのために何かがうまくいかなかったのはわかりませんが、これは私のために働いています。 MyRowItemは、INotifyPropertyChangedを実装する単なるランダムなクラスです。

値を往復させるには配線がもう少し必要です。奇妙なことがあります。

private void DataGrid_SelectedCellsChanged(object sender, 
    SelectedCellsChangedEventArgs e) 
{ 
    // For multiselection, e.AddedCells is a collection of all 
    // currently selected cells as DataGridCellInfo 

    var currentCell = (sender as DataGrid).CurrentCell; 

    var row = currentCell.Item as MyRowItem; 

    // Note that we're using the column header as a magic string. 
    // We could use the Tag property to make this slightly less 
    // fragile. 
    switch (currentCell.Column.Header.ToString()) 
    { 
     case "Combo One": 
      row.TextCol = row.ComboColOne; 
      break; 

     case "Combo Two": 
      row.TextCol = row.ComboColTwo; 
      break; 
    } 
} 

XAML

<DataGrid 
    ItemsSource="{Binding Path=ItemCollection}" 
    SelectionUnit="CellOrRowHeader" 
    AutoGenerateColumns="False" 
    SelectedCellsChanged="DataGrid_SelectedCellsChanged" 
    > 
    <DataGrid.Columns> 
     <DataGridTextColumn 
      Header="Text" 
      Binding="{Binding TextCol}" 
      Width="120" 
      /> 
     <DataGridComboBoxColumn 
      Header="Combo One" 
      ItemsSource="{Binding Source={x:Static local:MyRowItem.BValues}}" 
      SelectedItemBinding="{Binding ComboColOne}" 
      Width="120" 
      /> 
     <DataGridComboBoxColumn 
      Header="Combo Two" 
      ItemsSource="{Binding Source={x:Static local:MyRowItem.CValues}}" 
      SelectedItemBinding="{Binding ComboColTwo}" 
      Width="120" 
      /> 
    </DataGrid.Columns> 
</DataGrid> 
関連する問題