WPF Datagrid Cell 的 DataTemplate 的变化导致了不想要的结果

Change of WPF Datagrid Cell's DataTemplate caused not desired result

我有一个 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>

我还有第二个 "ordinary" {not modified} 列,称为 ID(int 类型)。

出现不想要的结果如下图:

第 1 步: 我打开我的数据网格所在的用户控件:

第2步:我点击第一个单元格在里面写东西(出于某种原因,只需要点击一下就可以把光标放在里面。一个"ordinary" 单元格需要 2 个 - 一个用于焦点,一个 - 将光标放入其中)

第3步:我在里面写点东西(这个单元格还是有焦点的)

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

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

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

第 7 步: 我按下键盘上的回车键,然后发生了这种情况

可能原因比较简单,但我觉得只用文字很难描述好。

列的 CellTemplate 应该包含一个只读的 TextBlock。您应该将可编辑的 TextBox 放在 CellEditingTemplate.

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