WPF数据网格单元的更改';的数据模板导致了不期望的结果

WPF数据网格单元的更改';的数据模板导致了不期望的结果,wpf,datagrid,cell,datatemplate,Wpf,Datagrid,Cell,Datatemplate,我有一个WPF DataGrid,我修改了它的第一列单元格模板,如下所示: <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid Margin="0"> <Grid.ColumnDefinitions>

我有一个WPF DataGrid,我修改了它的第一列单元格模板,如下所示:

<DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid Margin="0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="20"/>
                            </Grid.ColumnDefinitions>
                            <TextBox Grid.Column="0" Text="{Binding W_NAME, Mode=TwoWay}" 
                                     BorderThickness="0" 
                                     Background="Transparent"/>
                            <Button Grid.Column="1" Width="20"  
                                    Background="Transparent"
                                    IsEnabled="{Binding CantFound}"
                                    HorizontalAlignment="Right">
                                <StackPanel>
                                    <Image Source="/Resources/Pictures/Search.png"/>
                                </StackPanel>
                            </Button>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>

我还有第二个“普通”{not modified}列,称为ID(int类型)

不需要的结果如下所示:

<DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid Margin="0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="20"/>
                            </Grid.ColumnDefinitions>
                            <TextBox Grid.Column="0" Text="{Binding W_NAME, Mode=TwoWay}" 
                                     BorderThickness="0" 
                                     Background="Transparent"/>
                            <Button Grid.Column="1" Width="20"  
                                    Background="Transparent"
                                    IsEnabled="{Binding CantFound}"
                                    HorizontalAlignment="Right">
                                <StackPanel>
                                    <Image Source="/Resources/Pictures/Search.png"/>
                                </StackPanel>
                            </Button>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
步骤1:我打开用户控件,其中我的datagrid是:

第2步:我单击第一个单元格在其中写入内容(出于某种原因,只需单击一次就可以将光标放入其中。一个“普通”单元格需要2个,一个用于聚焦,一个用于将光标放入其中)

第3步:我在其中写了一些东西(此单元格仍处于聚焦状态)

第4步:我第一次单击第二个单元格(它只获得焦点)

第5步:我再次单击第二个单元格(光标在那里,默认值自动写入)。此时,第一个单元格中的值消失

第6步:我在第二个单元格中写入我的值:

第7步:我按下键盘上的enter键,就会发生这种情况


可能它的原因相对简单,但我发现很难用文字来描述它。

该列的
cellmetplate
应该包含一个只读
TextBlock
。您应该将可编辑的
文本框
放在
CellEditingTemplate


这就是内置的
DataGridTextColumn
的工作原理。默认情况下,您会看到一个
TextBlock
,当您双击单元格进入编辑模式时,会出现一个
TextBox
TextBlock
Text
属性和
TextBox
Text
属性绑定到同一源属性。

文本框应位于CellEditingTemplate中。CellTemplate应包含只读文本块。内置的DataGridTextColumn就是这样工作的。我试过了,但现在是另一个问题。第一个单元格中的值仅在我两次单击此单元格时显示。您需要一个带有TextBlock的CellTemplate和一个带有TextBox的CellEditingTemplate。看我的答案。这意味着我也必须有textblock和textbox?一个在cellTemplate中,另一个在CellEditingTemplate中是的,您应该定义带有文本块的cellTemplate和带有文本框的CellEditingTemplate。