我有一个启用了CanUserAddRows的简单数据网格:
我有一个文本框可以在Datagrid占位符的Total列输入总数,但是只要我完成输入,该值就会隐藏,就像那里有一个看不见的水印或其他东西。
<DataGrid x:Name="dgReceivables" Margin="8,98,10,91" Grid.ColumnSpan="2" AutoGenerateColumns="False"
KeyUp="dgReceivables_KeyUp" GridLinesVisibility="None" CellEditEnding="dgReceivables_CellEditEnding"
LoadingRow="dgReceivables_LoadingRow" TextInput="dgReceivables_TextInput" HorizontalContentAlignment="Center">
<DataGrid.Columns>
<DataGridTemplateColumn Header="TOTAL 2" Width="Auto">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate >
<StackPanel>
<TextBox x:Name="txtTotal" Text="{Binding Total,StringFormat={}{0:0.00}}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
CellTemplate
。例如,如果您使用DataGridTextColumn
列而不是覆盖,DataGird
将会知道所包含的数据是Text(字符串)。
在这种情况下,DataGird
会分别使用TextBlock
和TextBox
作为CellTemplate
和CellEditingTemplate
。
通过覆盖 DataGridTemplateColumn
,您完全取代了列行为。这意味着DataGrid
无法确定如何显示/编辑列中的数据。它仍然可能是一个字符串,但这并不意味着你实际上解释了这个字符串,它可能是你希望在DataGrid
中显示的图像的路径。
由于您只提供了 CellEditingTemplate
,DataGrid现在知道如何编辑该列中的数据,但不知道如何显示它。
当覆盖DataGridTemplateColumn
时,您需要提供至少 CellTemplate
,因为这定义了如何解释(显示)该列中的数据。如果您希望该列仅显示数据,则只需执行此操作。
试试这个:
<DataGrid.Columns>
<DataGridTemplateColumn Header="TOTAL 2" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Total, Mode=OneWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate >
<StackPanel>
<TextBox x:Name="txtTotal" Text="{Binding Total,StringFormat={}{0:0.00}}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
注意:代码未经测试!