在DataGrid中看不到文本框文本

时间:2018-07-18 16:28:26

标签: c# wpf datagrid textbox

我试图在WPF中制作一个DataGrid,以显示给定集合中各项的不同属性。到目前为止,除其中一项外,其他所有功能均正常运行。这是我的DataGrid的图像,它已按预期完全填充:

Fully Populated Data Grid

您可能已经看到我的问题了。每个项目都有一个与之关联的值,该值已正确绑定。但是,除非明确单击该单元格,否则看不到任何项目的值。例如:

Data Grid With Value Showing

我希望这些值在任何时候都是可见的,就像NameDefault Value列一样,但是非常重要的一点是,该值(仅该值)是可在DataGrid上编辑的。运行。这是我为数据网格准备的XAML:

<DataGrid Margin="20" AutoGenerateColumns="False" ItemsSource="{Binding ConfigurationParameterCollection}" Name="MasterListBox" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectionChanged="MasterListBox_SelectionChanged" AlternationCount="2" DockPanel.Dock="Top" HorizontalAlignment="Center" Width="1000" >
        <DataGrid.Columns>

            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>

            <!-- Begin Problem Area-->

            <DataGridTemplateColumn Header="Value">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Value, Mode=TwoWay}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

            <!-- End Problem Area-->

            <DataGridTextColumn  Header="Default Value" Binding="{Binding DefaultValue}"/>


        </DataGrid.Columns>
    </DataGrid>

不用担心DataGrid的名称,它曾经是一个ListBox,而我只是从不费心更改名称。一切都完美地链接在一起,我只是想不通为什么TextBox文本不可见。

非常感谢您能提供的任何帮助。

编辑

我知道我可以使用CellTemplate代替CellEditingTemplate来实现这一点,但是后者的功能是仅单击两次即可编辑,否则选择该行。我想拥有此功能,因此,如果可以使用CellTemplate进行此操作,请告诉我。使用CellTemplate,我随时都可以看到这些框:

enter image description here

我希望它看起来像第二张图片,其中该列的其余部分使用datagrid样式显示,而我正在编辑的单元格看起来像一个文本框。

1 个答案:

答案 0 :(得分:1)

更改     DataGridTemplateColumn.CellEditingTemplate 至     DataGridTemplateColumn.CellTemplate


您可以指定显示模板和编辑模板...

        <DataGridTemplateColumn Header="Value">
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Path=Value, Mode=TwoWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Value, Mode=TwoWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>