无法编辑我的 DataGrid WPF Framework 4.5 的单元格

Posted

技术标签:

【中文标题】无法编辑我的 DataGrid WPF Framework 4.5 的单元格【英文标题】:Cannot edit cells of my DataGrid WPF Framework 4.5 【发布时间】:2012-11-03 08:52:33 【问题描述】:

我的 ObservableCollection 包含三个项目,并且这些行始终显示在数据网格中。 我无法将 DataGrid 的单个单元格变为编辑模式。我尝试了单击、单击、双击、F2、...,但整行都保持选中状态。如何让用户编辑数据网格。 我在其他帖子中发现了类似的数据网格编辑问题,但没有人解决我的问题。这是代码(WPF NetFramework 4.5)。目的是,只有第一列是不可编辑的(只读)。

<DataGrid Name="myDataGrid" Grid.Row="2" AutoGenerateColumns="False" ItemsSource="Binding" IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="name" IsReadOnly="True" Width="200"  >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding Name"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Formulation" Width="100" IsReadOnly="False">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding FormulationStr" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding FormulationStr" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="volume Diff" Width="100" IsReadOnly="False">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding volumeDiff" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding volumeDiff" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

【问题讨论】:

【参考方案1】:

您已将TextBlock 放入cell template 以及cell editing template。这就是为什么您在按 F2 并双击单元格时没有注意到任何变化,因为无论如何它都将始终是您无法编辑的 TextBlock

像这样将TextBox 放在你的CellEditingTemplate 中-

<DataGridTemplateColumn Header="Formulation" Width="100" IsReadOnly="False">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="Binding FormulationStr" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="Binding FormulationStr" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

或者简单地使用DataGridTextColumn 代替DataGridTemplateColumn,它在内部提供支持您通过上述代码尝试实现的目标-

<DataGridTextColumn Header="Formulation" Width="100" IsReadOnly="False" Binding="Binding FormulationStr" />

【讨论】:

我可以将文本粘贴到单元格中,但我无法在其中输入任何内容 - 任何想法

以上是关于无法编辑我的 DataGrid WPF Framework 4.5 的单元格的主要内容,如果未能解决你的问题,请参考以下文章

WPF Datagrid 模板列编辑事件和交替列颜色

WPF DataGrid 全行编辑

WPF Datagrid 行编辑“ENDED”事件

WPF Datagrid 样式选定的行

C#WPF根据数据长度编辑datagrid单元格颜色

WPF DataGrid CellEditEnded 事件