在 DataGrid 中看不到文本框文本
Can't see Textbox text in DataGrid
我正在尝试在 WPF 中创建一个 DataGrid,它将显示给定集合中项目的不同属性。到目前为止,一切正常,除了一个。这是我的 DataGrid 的图像,它按预期完全填充:
你可能已经看到我的问题了。每个项目都有一个与之关联的值,该值已正确绑定。但是,除非我专门单击该单元格,否则我看不到任何项目的值。例如:
我希望这些值始终可见,就像 Name
和 Default Value
列一样,但是非常重要的是,该值,而且只能是该值,可以从运行时的数据网格。这是我为数据网格准备的 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
,我总是看到框:
我希望它像第二张图片中那样,其中列的其余部分以数据网格的样式显示,而我正在编辑的单元格看起来像一个文本框。
改变
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>
我正在尝试在 WPF 中创建一个 DataGrid,它将显示给定集合中项目的不同属性。到目前为止,一切正常,除了一个。这是我的 DataGrid 的图像,它按预期完全填充:
你可能已经看到我的问题了。每个项目都有一个与之关联的值,该值已正确绑定。但是,除非我专门单击该单元格,否则我看不到任何项目的值。例如:
我希望这些值始终可见,就像 Name
和 Default Value
列一样,但是非常重要的是,该值,而且只能是该值,可以从运行时的数据网格。这是我为数据网格准备的 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
,我总是看到框:
我希望它像第二张图片中那样,其中列的其余部分以数据网格的样式显示,而我正在编辑的单元格看起来像一个文本框。
改变 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>