向DataGrid添加新行后行内容显示空白的问题如何解决?
问题原因
DataGrid的文本列默认需要指定绑定路径才能读取数据源的值,你当前的XAML未给DataGridTextColumn设置Binding属性,且数组类型的元素需要按索引绑定才能读取对应位置的值,因此出现空白行。
解决方法
方法1:直接适配现有数组添加逻辑
仅修改XAML代码,给列绑定数组的对应索引即可正常显示:
<Grid> <DataGrid x:Name="MessageDataGrid"> <DataGrid.Columns> <DataGridTextColumn Header="Naam" Binding="{Binding [0]}" /> <DataGridTextColumn Header="Bericht" Binding="{Binding [1]}"/> </DataGrid.Columns> </DataGrid> </Grid>
修改后你原有的C#添加代码无需改动即可正常显示内容。
方法2:使用实体类(更推荐)
这种方法可维护性更强,适合业务场景使用:
- 首先自定义数据实体类
public class MessageItem { public string Naam { get; set; } public string Bericht { get; set; } }
- 修改XAML列绑定为对应属性名
<Grid> <DataGrid x:Name="MessageDataGrid"> <DataGrid.Columns> <DataGridTextColumn Header="Naam" Binding="{Binding Naam}" /> <DataGridTextColumn Header="Bericht" Binding="{Binding Bericht}"/> </DataGrid.Columns> </DataGrid> </Grid>
- 修改添加行的逻辑
this.MessageDataGrid.Items.Add(new MessageItem { Naam = "hi", Bericht = "bye" });
最佳实践
如果需要频繁增删数据,建议使用ObservableCollection<T>作为数据源,集合变动时UI会自动同步更新:
// 窗口全局定义可观察集合 public ObservableCollection<MessageItem> MessageList { get; set; } = new ObservableCollection<MessageItem>(); // 窗口初始化时绑定数据源 public MainWindow() { InitializeComponent(); MessageDataGrid.ItemsSource = MessageList; } // 新增数据直接操作集合即可 private void AddRow() { MessageList.Add(new MessageItem { Naam = "hi", Bericht = "bye" }); }
内容的提问来源于stack exchange,提问作者Brekers
相关产品推荐
相关产品推荐

