2

DataGridDataTemplateにComboBoxがあります

<DataGridTemplateColumn Header="Stock Name" Width="290">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding StockName}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox Width="290" Name="cmbStock" ItemsSource="{Binding Path=Stocks}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" ></ComboBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

タブを使用してこのDataGridCellに到達したときにComboBoxをDropDownOpenにします。これには、到達したときにDataGridセルを編集モードにすることが含まれます。

WPFMVVMを使用しています

4

1 に答える 1

2

データグリッドを強制的に「シングルクリックまたはタブ」編集モードにする必要があると思います。基本的に、セルに焦点が合ったら、グリッドにCellTemplateをCellEditingTemplateに切り替えます。そのためのコードは次のとおりです。

BeginEdit(); //dataGrid.BeginEdit()

さて、それをどこでどのように接続するかは、あなたがやりたい仕事の量に依存します。DataGridクラスを拡張して、DependencyProperty"SingleClickEdit"またはそれを呼び出したいものを導入することができます。次に、モニター/プレビューキーを押し下げてタブでセルを選択し、強制的に編集モードにします。または、その列だけに必要な場合は、次のことを監視できます。

<TextBlock Text="{Binding StockName}" 
           GotFocus="OnGotFocus" 
           PreviewKeyDown="OnPreviewKeyDown"
  ....., or something like that

次に、.csコードで、たとえばOnGotFocus()で、datagrid.BeginEdit()を呼び出します。

編集:(以下のコメント/会議ごとに)

  • SelectionChangedハンドラーをデータグリッドに追加します
  • IsDropDownOpen=trueをコンボボックスに追加します

    <DataGrid x:Name="dataGrid" 
           SelectionChanged="dataGrid_SelectionChanged"
           ....>
    
    <ComboBox Width="290" Name="cmbStock" ItemsSource="{Binding Path=Stocks}" 
          ...
          IsDropDownOpen="True"></ComboBox>
    </DataTemplate>
    
  • .csで

    private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        dataGrid.BeginEdit();
    }
    

それでうまくいくはずです、私のテストで動作します:)基本的に、選択時にデータグリッドを編集モードに強制し、編集モードでは、すでに開いているコンボボックスを取得します

于 2012-04-23T18:17:37.730 に答える