WPF DataGrid绑定Int64列表显示空行但ComboBox正常,如何排查解决?
问题根因
该问题由DataGrid和ComboBox的默认绑定逻辑差异导致:
- ComboBox默认会直接调用集合元素的
ToString()方法展示内容,所以直接绑定List<Int64>可以正常显示数值。 - 开启
AutoGenerateColumns="True"的DataGrid会自动遍历集合元素的公共属性生成列,而Int64是值类型,没有可供绑定的公共可读属性,所以生成的列没有绑定源,最终表现为行数匹配但内容全空。
解决方案
方案1:手动定义DataGrid列(最简便)
不需要修改后台代码,仅调整XAML中DataGrid的配置,显式指定列绑定到当前行的元素本身(用Path=.表示)即可:
<DataGrid AutoGenerateColumns="False" x:Name="SapGrid" Margin="10,10,10,10" > <DataGrid.Columns> <DataGridTextColumn Header="Sap单据号" Binding="{Binding Path=.}" /> </DataGrid.Columns> </DataGrid>
注意需要把AutoGenerateColumns属性改为False,避免自动生成多余的空列。
方案2:包装基础类型为自定义类
如果后续需要给每行扩展其他属性(如勾选状态、关联备注等),可以把Int64包装为自定义类:
public class SapDocNumberItem { public long Number { get; set; } }
之后将Document类里的SapDocNumbers属性类型改为List<SapDocNumberItem>,赋值时把数值存入Number属性,原来的DataGrid自动生成列逻辑就可以正常读取到Number属性并展示内容。
内容的提问来源于stack exchange,提问作者Praxiom
相关产品推荐
相关产品推荐

