填充WPF DataGrid行时遇CS1061错误及空行数设置问题求助
WPF DataGrid CS1061错误解决及空行数设置
一、解决CS1061错误
CS1061错误的核心原因是WPF的DataGrid没有Rows属性,你写的是WinForms DataGrid的代码逻辑。WPF遵循数据绑定设计模式,正确的填充方式如下:
1. 创建数据模型类
定义与DataGrid列对应的实体类,每个属性对应一列数据:
public class ElectionItem { public string Election { get; set; } public bool IsDefault { get; set; } public string OtherElection { get; set; } public string EffectiveDate { get; set; } public string FilingDeadline { get; set; } }
2. 声明可观察集合作为数据源
使用ObservableCollection(而非普通集合),它能自动通知UI更新数据变化:
using System.Collections.ObjectModel; // 在窗口类中声明数据源 private ObservableCollection<ElectionItem> _electionItems = new ObservableCollection<ElectionItem>(); public ObservableCollection<ElectionItem> ElectionItems => _electionItems;
3. 填充数据到集合
将你的数据转换为ElectionItem对象并添加到集合:
_electionItems.Add(new ElectionItem { Election = "a", IsDefault = false, OtherElection = "Form 1" }); _electionItems.Add(new ElectionItem { Election = "b", IsDefault = false, OtherElection = "Form 2" }); _electionItems.Add(new ElectionItem { Election = "S ", IsDefault = false, OtherElection = "Form 3" }); _electionItems.Add(new ElectionItem { Election = "d ", IsDefault = false, OtherElection = "Form 4" }); _electionItems.Add(new ElectionItem { Election = "e ", IsDefault = false, OtherElection = "Form 5" }); _electionItems.Add(new ElectionItem { Election = "f ", IsDefault = false, OtherElection = "Form 6" });
4. 修改XAML绑定数据源
给DataGrid设置ItemsSource绑定,并为每列指定对应的属性路径:
<DataGrid x:Name="election_grid" Grid.Column="1" Grid.Row="30" Grid.ColumnSpan="6" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" ItemsSource="{Binding ElectionItems}"> <DataGrid.Columns> <DataGridTextColumn Header="Election" Width="150" Binding="{Binding Election}"/> <DataGridCheckBoxColumn Header="Default?" Width="150" Binding="{Binding IsDefault}"/> <DataGridTextColumn Header="Other Election" Width="150" Binding="{Binding OtherElection}"/> <DataGridTextColumn Header="Election Effective Date" Width="150" Binding="{Binding EffectiveDate}"/> <DataGridTextColumn Header="Date Election must be filed" Width="200" Binding="{Binding FilingDeadline}"/> </DataGrid.Columns> </DataGrid>
5. 设置DataContext让绑定生效
在窗口构造函数中设置DataContext为当前窗口实例:
public MainWindow() { InitializeComponent(); DataContext = this; }
临时替代方案(不推荐)
如果不想用数据绑定,可直接通过Items属性添加行,但不符合WPF设计思想,无法支持UI自动更新:
foreach (string[] rowArray in rows) { election_grid.Items.Add(new { Election = rowArray[0], IsDefault = false, OtherElection = rowArray[2], EffectiveDate = "", FilingDeadline = "" }); }
二、设置DataGrid的空行数
1. 关闭默认新增行
WPF DataGrid默认会在末尾显示一行空行用于添加新数据,若要关闭,设置:
<DataGrid ... CanUserAddRows="False" />
2. 添加固定数量的空行
如果需要显示指定数量的空行,直接往数据源集合中添加空的ElectionItem对象即可:
// 示例:添加3个空行 for (int i = 0; i < 3; i++) { _electionItems.Add(new ElectionItem()); }
内容的提问来源于stack exchange,提问作者Titanium_Alfa
相关产品推荐
相关产品推荐

