2

DataGrid在 DataTemplate 中有一个 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>

当我使用 Tab 到达此 DataGridCell 时,我希望 ComboBox 为 DropDownOpen 这包括在我到达它时使 DataGrid Cell 处于编辑模式。

我正在使用 WPF MVVM

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 回答