IsDropDownOpen在WPF MVVM中的DataGrid DataTemplate ComboBox中

时间:2012-04-23 17:50:23

标签: wpf xaml mvvm datagrid combobox

我在DataTemplate中有一个DataGrid和一个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单元格处于编辑模式。

我正在使用WPF MVVM

1 个答案:

答案 0 :(得分: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处理程序添加到datagrid
  • 将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();
    }
    

应该这样做,在我的测试中工作:),基本上你在选择时强制数据网格进入编辑模式,在编辑模式下,你得到了已经打开的组合框